Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose termcolor's ColorChoice and make colors optional #72

Merged
merged 2 commits into from Mar 27, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "simplelog"
version = "0.9.0"
version = "0.10.0"
edition = "2018"
authors = ["Drakulix <github@drakulix.de>"]
description = "A simple and easy-to-use logging facility for Rust's log crate"
Expand Down
8 changes: 4 additions & 4 deletions examples/custom_colors.rs
Expand Up @@ -4,11 +4,11 @@ use simplelog::*;
#[cfg(feature = "termcolor")]
fn main() {
let config = ConfigBuilder::new()
.set_level_color(Level::Error, Color::Magenta)
.set_level_color(Level::Trace, Color::Green)
.set_level_color(Level::Error, Some(Color::Magenta))
.set_level_color(Level::Trace, Some(Color::Green))
.build();

TermLogger::init(LevelFilter::Trace, config, TerminalMode::Stdout).unwrap();
TermLogger::init(LevelFilter::Trace, config, TerminalMode::Stdout, ColorChoice::Auto).unwrap();
error!("Magenta error");
warn!("Yellow warning");
info!("Blue info");
Expand All @@ -19,4 +19,4 @@ fn main() {
#[cfg(not(feature = "termcolor"))]
fn main() {
println!("this example requires the termcolor feature.");
}
}
9 changes: 7 additions & 2 deletions examples/default_colors.rs
Expand Up @@ -3,7 +3,12 @@ use simplelog::*;

#[cfg(feature = "termcolor")]
fn main() {
TermLogger::init(LevelFilter::Trace, Config::default(), TerminalMode::Stdout).unwrap();
TermLogger::init(
LevelFilter::Trace,
Config::default(),
TerminalMode::Stdout,
ColorChoice::Auto
).unwrap();
error!("Red error");
warn!("Yellow warning");
info!("Blue info");
Expand All @@ -14,4 +19,4 @@ fn main() {
#[cfg(not(feature = "termcolor"))]
fn main() {
println!("this example requires the termcolor feature.");
}
}
19 changes: 12 additions & 7 deletions examples/rgb_colors.rs
Expand Up @@ -4,14 +4,19 @@ use simplelog::*;
#[cfg(all(not(target_family = "windows"), feature = "termcolor"))]
fn main() {
let config = ConfigBuilder::new()
.set_level_color(Level::Error, Color::Rgb(191, 0, 0))
.set_level_color(Level::Warn, Color::Rgb(255, 127, 0))
.set_level_color(Level::Info, Color::Rgb(192, 192, 0))
.set_level_color(Level::Debug, Color::Rgb(63, 127, 0))
.set_level_color(Level::Trace, Color::Rgb(127, 127, 255))
.set_level_color(Level::Error, Some(Color::Rgb(191, 0, 0)))
.set_level_color(Level::Warn, Some(Color::Rgb(255, 127, 0)))
.set_level_color(Level::Info, Some(Color::Rgb(192, 192, 0)))
.set_level_color(Level::Debug, Some(Color::Rgb(63, 127, 0)))
.set_level_color(Level::Trace, Some(Color::Rgb(127, 127, 255)))
.build();

TermLogger::init(LevelFilter::Trace, config, TerminalMode::Stdout).unwrap();
TermLogger::init(
LevelFilter::Trace,
config,
TerminalMode::Stdout,
ColorChoice::Auto
).unwrap();
error!("Red error");
warn!("Orange warning");
info!("Yellow info");
Expand All @@ -22,4 +27,4 @@ fn main() {
#[cfg(any(target_family = "windows", not(feature = "termcolor")))]
fn main() {
println!("this example requires the termcolor feature and a non-Windows OS.");
}
}
7 changes: 6 additions & 1 deletion examples/usage.rs
Expand Up @@ -6,7 +6,12 @@ use std::fs::File;
fn main() {
CombinedLogger::init(vec![
#[cfg(feature = "termcolor")]
TermLogger::new(LevelFilter::Warn, Config::default(), TerminalMode::Mixed),
TermLogger::new(
LevelFilter::Warn,
Config::default(),
TerminalMode::Mixed,
ColorChoice::Auto
),
#[cfg(not(feature = "termcolor"))]
SimpleLogger::new(LevelFilter::Warn, Config::default()),
WriteLogger::new(
Expand Down
19 changes: 10 additions & 9 deletions src/config.rs
Expand Up @@ -64,7 +64,7 @@ pub struct Config {
pub(crate) filter_allow: Cow<'static, [Cow<'static, str>]>,
pub(crate) filter_ignore: Cow<'static, [Cow<'static, str>]>,
#[cfg(feature = "termcolor")]
pub(crate) level_color: [Color; 6],
pub(crate) level_color: [Option<Color>; 6],
}

/// Builder for the Logger Configurations (`Config`)
Expand Down Expand Up @@ -138,9 +138,10 @@ impl ConfigBuilder {
self
}

/// Set the color used for printing the level (if the logger supports it)
/// Set the color used for printing the level (if the logger supports it),
/// or None to use the default foreground color
#[cfg(feature = "termcolor")]
pub fn set_level_color<'a>(&'a mut self, level: Level, color: Color) -> &'a mut ConfigBuilder {
pub fn set_level_color<'a>(&'a mut self, level: Level, color: Option<Color>) -> &'a mut ConfigBuilder {
self.0.level_color[level as usize] = color;
self
}
Expand Down Expand Up @@ -265,12 +266,12 @@ impl Default for Config {

#[cfg(feature = "termcolor")]
level_color: [
Color::White, // (dummy)
Color::Red, // Error
Color::Yellow, // Warn
Color::Blue, // Info
Color::Cyan, // Debug
Color::White, // Trace
None, // Default foreground
Some(Color::Red), // Error
Some(Color::Yellow), // Warn
Some(Color::Blue), // Info
Some(Color::Cyan), // Debug
Some(Color::White), // Trace
],
}
}
Expand Down
12 changes: 6 additions & 6 deletions src/lib.rs
Expand Up @@ -31,7 +31,7 @@ pub use self::loggers::{CombinedLogger, SimpleLogger, WriteLogger};
#[cfg(feature = "termcolor")]
pub use self::loggers::{TermLogger, TerminalMode};
#[cfg(feature = "termcolor")]
pub use termcolor::Color;
pub use termcolor::{Color, ColorChoice};

pub use log::{Level, LevelFilter};

Expand Down Expand Up @@ -126,7 +126,7 @@ mod tests {
);
#[cfg(feature = "termcolor")]
vec.push(
TermLogger::new(LevelFilter::Error, conf.clone(), TerminalMode::Mixed)
TermLogger::new(LevelFilter::Error, conf.clone(), TerminalMode::Mixed, ColorChoice::Auto)
as Box<dyn SharedLogger>,
);
vec.push(WriteLogger::new(
Expand All @@ -143,7 +143,7 @@ mod tests {
);
#[cfg(feature = "termcolor")]
vec.push(
TermLogger::new(LevelFilter::Warn, conf.clone(), TerminalMode::Mixed)
TermLogger::new(LevelFilter::Warn, conf.clone(), TerminalMode::Mixed, ColorChoice::Auto)
as Box<dyn SharedLogger>,
);
vec.push(WriteLogger::new(
Expand All @@ -160,7 +160,7 @@ mod tests {
);
#[cfg(feature = "termcolor")]
vec.push(
TermLogger::new(LevelFilter::Info, conf.clone(), TerminalMode::Mixed)
TermLogger::new(LevelFilter::Info, conf.clone(), TerminalMode::Mixed, ColorChoice::Auto)
as Box<dyn SharedLogger>,
);
vec.push(WriteLogger::new(
Expand All @@ -177,7 +177,7 @@ mod tests {
);
#[cfg(feature = "termcolor")]
vec.push(
TermLogger::new(LevelFilter::Debug, conf.clone(), TerminalMode::Mixed)
TermLogger::new(LevelFilter::Debug, conf.clone(), TerminalMode::Mixed, ColorChoice::Auto)
as Box<dyn SharedLogger>,
);
vec.push(WriteLogger::new(
Expand All @@ -194,7 +194,7 @@ mod tests {
);
#[cfg(feature = "termcolor")]
vec.push(
TermLogger::new(LevelFilter::Trace, conf.clone(), TerminalMode::Mixed)
TermLogger::new(LevelFilter::Trace, conf.clone(), TerminalMode::Mixed, ColorChoice::Auto)
as Box<dyn SharedLogger>,
);
vec.push(WriteLogger::new(
Expand Down
4 changes: 2 additions & 2 deletions src/loggers/comblog.rs
Expand Up @@ -37,7 +37,7 @@ impl CombinedLogger {
/// let _ = CombinedLogger::init(
/// vec![
/// # #[cfg(feature = "termcolor")]
/// TermLogger::new(LevelFilter::Info, Config::default(), TerminalMode::Mixed),
/// TermLogger::new(LevelFilter::Info, Config::default(), TerminalMode::Mixed, ColorChoice::Auto),
/// WriteLogger::new(LevelFilter::Info, Config::default(), File::create("my_rust_bin.log").unwrap())
/// ]
/// );
Expand Down Expand Up @@ -68,7 +68,7 @@ impl CombinedLogger {
/// let combined_logger = CombinedLogger::new(
/// vec![
/// # #[cfg(feature = "termcolor")]
/// TermLogger::new(LevelFilter::Debug, Config::default(), TerminalMode::Mixed),
/// TermLogger::new(LevelFilter::Debug, Config::default(), TerminalMode::Mixed, ColorChoice::Auto),
/// WriteLogger::new(LevelFilter::Info, Config::default(), File::create("my_rust_bin.log").unwrap())
/// ]
/// );
Expand Down
32 changes: 22 additions & 10 deletions src/loggers/termlog.rs
Expand Up @@ -68,15 +68,21 @@ impl TermLogger {
/// # extern crate simplelog;
/// # use simplelog::*;
/// # fn main() {
/// TermLogger::init(LevelFilter::Info, Config::default(), TerminalMode::Mixed);
/// TermLogger::init(
/// LevelFilter::Info,
/// Config::default(),
/// TerminalMode::Mixed,
/// ColorChoice::Auto
/// );
/// # }
/// ```
pub fn init(
log_level: LevelFilter,
config: Config,
mode: TerminalMode,
color_choice: ColorChoice
) -> Result<(), SetLoggerError> {
let logger = TermLogger::new(log_level, config, mode);
let logger = TermLogger::new(log_level, config, mode, color_choice);
set_max_level(log_level.clone());
set_boxed_logger(logger)?;
Ok(())
Expand All @@ -96,26 +102,32 @@ impl TermLogger {
/// # extern crate simplelog;
/// # use simplelog::*;
/// # fn main() {
/// let term_logger = TermLogger::new(LevelFilter::Info, Config::default(), TerminalMode::Mixed);
/// let term_logger = TermLogger::new(
/// LevelFilter::Info,
/// Config::default(),
/// TerminalMode::Mixed,
/// ColorChoice::Auto
/// );
/// # }
/// ```
pub fn new(
log_level: LevelFilter,
config: Config,
mode: TerminalMode,
color_choice: ColorChoice
) -> Box<TermLogger> {
let streams = match mode {
TerminalMode::Stdout => OutputStreams {
err: StdTerminal::Stdout(Box::new(StandardStream::stdout(ColorChoice::Always))),
out: StdTerminal::Stdout(Box::new(StandardStream::stdout(ColorChoice::Always)))
err: StdTerminal::Stdout(Box::new(StandardStream::stdout(color_choice))),
out: StdTerminal::Stdout(Box::new(StandardStream::stdout(color_choice)))
},
TerminalMode::Stderr => OutputStreams {
err: StdTerminal::Stderr(Box::new(StandardStream::stderr(ColorChoice::Always))),
out: StdTerminal::Stderr(Box::new(StandardStream::stderr(ColorChoice::Always)))
err: StdTerminal::Stderr(Box::new(StandardStream::stderr(color_choice))),
out: StdTerminal::Stderr(Box::new(StandardStream::stderr(color_choice)))
},
TerminalMode::Mixed => OutputStreams {
err: StdTerminal::Stderr(Box::new(StandardStream::stderr(ColorChoice::Always))),
out: StdTerminal::Stdout(Box::new(StandardStream::stdout(ColorChoice::Always)))
err: StdTerminal::Stderr(Box::new(StandardStream::stderr(color_choice))),
out: StdTerminal::Stdout(Box::new(StandardStream::stdout(color_choice)))
},
};

Expand All @@ -139,7 +151,7 @@ impl TermLogger {
}

if self.config.level <= record.level() && self.config.level != LevelFilter::Off {
term_lock.set_color(ColorSpec::new().set_fg(Some(color)))?;
term_lock.set_color(ColorSpec::new().set_fg(color))?;
write_level(record, &mut *term_lock, &self.config)?;
term_lock.reset()?;
}
Expand Down