@@ -15,6 +15,7 @@ use tracing_subscriber::{
15
15
pub struct HierarchicalLayer {
16
16
stdout : io:: Stdout ,
17
17
indent_amount : usize ,
18
+ ansi : bool ,
18
19
}
19
20
20
21
struct Data {
@@ -80,9 +81,23 @@ impl<'a> fmt::Display for ColorLevel<'a> {
80
81
81
82
impl HierarchicalLayer {
82
83
pub fn new ( indent_amount : usize ) -> Self {
84
+ let ansi = atty:: is ( atty:: Stream :: Stdout ) ;
83
85
Self {
84
86
indent_amount,
85
87
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 ( )
86
101
}
87
102
}
88
103
@@ -151,24 +166,21 @@ where
151
166
write ! (
152
167
& mut stdout,
153
168
"{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( ) )
158
170
)
159
171
. unwrap ( ) ;
160
172
write ! (
161
173
& mut stdout,
162
174
"{}" ,
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("{")
164
176
)
165
177
. unwrap ( ) ;
166
178
self . print_kvs ( & mut stdout, data. kvs . iter ( ) . map ( |( k, v) | ( k, v) ) , "" )
167
179
. unwrap ( ) ;
168
180
write ! (
169
181
& mut stdout,
170
182
"{}" ,
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("}")
172
184
)
173
185
. unwrap ( ) ;
174
186
writeln ! ( & mut stdout) . unwrap ( ) ;
@@ -203,14 +215,21 @@ where
203
215
let now = Local :: now ( ) ;
204
216
if let Some ( start) = start {
205
217
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
+ } ;
206
224
write ! (
207
225
& mut stdout,
208
226
"{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,
214
233
)
215
234
. expect ( "Unable to write to stdout" ) ;
216
235
}
0 commit comments