Skip to content

Commit

Permalink
Merge pull request #72 from mrkline/optional-color
Browse files Browse the repository at this point in the history
Expose termcolor's ColorChoice and make colors optional
  • Loading branch information
Drakulix committed Mar 27, 2021
2 parents d12b249 + a17ca28 commit a6216ae
Show file tree
Hide file tree
Showing 9 changed files with 70 additions and 42 deletions.
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

0 comments on commit a6216ae

Please sign in to comment.