summaryrefslogtreecommitdiffstats
path: root/libimagrt
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2016-08-02 11:38:38 +0200
committerMatthias Beyer <mail@beyermatthias.de>2016-08-02 11:38:38 +0200
commit8a0200a1831db28293565a77f50b1f4e52f5ddcb (patch)
tree2cbd778610d32fe293aff7b05c3a99aa18cebe62 /libimagrt
parentd4fa5b7de31224003dce0f3ed0443ff9a08aabb4 (diff)
Make coloring optional via flag in ImagLogger
Diffstat (limited to 'libimagrt')
-rw-r--r--libimagrt/src/logger.rs43
1 files changed, 35 insertions, 8 deletions
diff --git a/libimagrt/src/logger.rs b/libimagrt/src/logger.rs
index e637163d..f5b6ad76 100644
--- a/libimagrt/src/logger.rs
+++ b/libimagrt/src/logger.rs
@@ -3,8 +3,13 @@ use std::io::stderr;
use log::{Log, LogLevel, LogRecord, LogMetadata};
+use ansi_term::Style;
+use ansi_term::Colour;
+use ansi_term::ANSIString;
+
pub struct ImagLogger {
lvl: LogLevel,
+ color_enabled: bool,
}
impl ImagLogger {
@@ -12,6 +17,28 @@ impl ImagLogger {
pub fn new(lvl: LogLevel) -> ImagLogger {
ImagLogger {
lvl: lvl,
+ color_enabled: true
+ }
+ }
+
+ pub fn with_color(mut self, b: bool) -> ImagLogger {
+ self.color_enabled = b;
+ self
+ }
+
+ fn style_or_not(&self, c: Style, s: String) -> ANSIString {
+ if self.color_enabled {
+ c.paint(s)
+ } else {
+ ANSIString::from(s)
+ }
+ }
+
+ fn color_or_not(&self, c: Colour, s: String) -> ANSIString {
+ if self.color_enabled {
+ c.paint(s)
+ } else {
+ ANSIString::from(s)
}
}
@@ -33,22 +60,22 @@ impl Log for ImagLogger {
let loc = record.location();
match record.metadata().level() {
LogLevel::Debug => {
- let lvl = Cyan.paint(format!("{}", record.level()));
- let file = Cyan.paint(format!("{}", loc.file()));
- let ln = Cyan.paint(format!("{}", loc.line()));
- let args = Cyan.paint(format!("{}", record.args()));
+ let lvl = self.color_or_not(Cyan, format!("{}", record.level()));
+ let file = self.color_or_not(Cyan, format!("{}", loc.file()));
+ let ln = self.color_or_not(Cyan, format!("{}", loc.line()));
+ let args = self.color_or_not(Cyan, format!("{}", record.args()));
writeln!(stderr(), "[imag][{: <5}][{}][{: >5}]: {}", lvl, file, ln, args).ok();
},
LogLevel::Warn | LogLevel::Error => {
- let lvl = Red.blink().paint(format!("{}", record.level()));
- let args = Red.paint(format!("{}", record.args()));
+ let lvl = self.style_or_not(Red.blink(), format!("{}", record.level()));
+ let args = self.color_or_not(Red, format!("{}", record.args()));
writeln!(stderr(), "[imag][{: <5}]: {}", lvl, args).ok();
},
LogLevel::Info => {
- let lvl = Yellow.paint(format!("{}", record.level()));
- let args = Yellow.paint(format!("{}", record.args()));
+ let lvl = self.color_or_not(Yellow, format!("{}", record.level()));
+ let args = self.color_or_not(Yellow, format!("{}", record.args()));
writeln!(stderr(), "[imag][{: <5}]: {}", lvl, args).ok();
},