Skip to content

Commit 0dc6c9a

Browse files
authored
Make ANSI color codes optional / detect when writing to TTY (#6)
1 parent a019a80 commit 0dc6c9a

File tree

2 files changed

+31
-11
lines changed

2 files changed

+31
-11
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ quanta = "0.3.1"
1414
termcolor = "1.0.5"
1515
ansi_term = "0.12.1"
1616
chrono = "0.4.10"
17+
atty = "0.2.14"

src/lib.rs

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use tracing_subscriber::{
1515
pub struct HierarchicalLayer {
1616
stdout: io::Stdout,
1717
indent_amount: usize,
18+
ansi: bool,
1819
}
1920

2021
struct Data {
@@ -80,9 +81,23 @@ impl<'a> fmt::Display for ColorLevel<'a> {
8081

8182
impl HierarchicalLayer {
8283
pub fn new(indent_amount: usize) -> Self {
84+
let ansi = atty::is(atty::Stream::Stdout);
8385
Self {
8486
indent_amount,
8587
stdout: io::stdout(),
88+
ansi,
89+
}
90+
}
91+
92+
pub fn with_ansi(self, ansi: bool) -> Self {
93+
Self { ansi, ..self }
94+
}
95+
96+
fn styled(&self, style: Style, text: impl AsRef<str>) -> String {
97+
if self.ansi {
98+
style.paint(text.as_ref()).to_string()
99+
} else {
100+
text.as_ref().to_string()
86101
}
87102
}
88103

@@ -151,24 +166,21 @@ where
151166
write!(
152167
&mut stdout,
153168
"{name}",
154-
name = Style::new()
155-
.fg(Color::Green)
156-
.bold()
157-
.paint(span.metadata().name())
169+
name = self.styled(Style::new().fg(Color::Green).bold(), span.metadata().name())
158170
)
159171
.unwrap();
160172
write!(
161173
&mut stdout,
162174
"{}",
163-
Style::new().fg(Color::Green).paint("{") // Style::new().fg(Color::Green).dimmed().paint("{")
175+
self.styled(Style::new().fg(Color::Green).bold(), "{") // Style::new().fg(Color::Green).dimmed().paint("{")
164176
)
165177
.unwrap();
166178
self.print_kvs(&mut stdout, data.kvs.iter().map(|(k, v)| (k, v)), "")
167179
.unwrap();
168180
write!(
169181
&mut stdout,
170182
"{}",
171-
Style::new().fg(Color::Green).bold().paint("}") // Style::new().dimmed().paint("}")
183+
self.styled(Style::new().fg(Color::Green).bold(), "}") // Style::new().dimmed().paint("}")
172184
)
173185
.unwrap();
174186
writeln!(&mut stdout).unwrap();
@@ -203,14 +215,21 @@ where
203215
let now = Local::now();
204216
if let Some(start) = start {
205217
let elapsed = now - start;
218+
let level = event.metadata().level();
219+
let level = if self.ansi {
220+
ColorLevel(level).to_string()
221+
} else {
222+
level.to_string()
223+
};
206224
write!(
207225
&mut stdout,
208226
"{timestamp}{unit} {level}",
209-
timestamp = Style::new()
210-
.dimmed()
211-
.paint(elapsed.num_milliseconds().to_string()),
212-
unit = Style::new().dimmed().paint("ms"),
213-
level = ColorLevel(event.metadata().level())
227+
timestamp = self.styled(
228+
Style::new().dimmed(),
229+
elapsed.num_milliseconds().to_string()
230+
),
231+
unit = self.styled(Style::new().dimmed(), "ms"),
232+
level = level,
214233
)
215234
.expect("Unable to write to stdout");
216235
}

0 commit comments

Comments
 (0)