@@ -57,6 +57,7 @@ pub struct LoggerConfig {
57
57
pub verbose_entry_exit : Result < String , VarError > ,
58
58
pub verbose_thread_ids : Result < String , VarError > ,
59
59
pub backtrace : Result < String , VarError > ,
60
+ pub wraptree : Result < String , VarError > ,
60
61
}
61
62
62
63
impl LoggerConfig {
@@ -67,6 +68,7 @@ impl LoggerConfig {
67
68
verbose_entry_exit : env:: var ( format ! ( "{env}_ENTRY_EXIT" ) ) ,
68
69
verbose_thread_ids : env:: var ( format ! ( "{env}_THREAD_IDS" ) ) ,
69
70
backtrace : env:: var ( format ! ( "{env}_BACKTRACE" ) ) ,
71
+ wraptree : env:: var ( format ! ( "{env}_WRAPTREE" ) ) ,
70
72
}
71
73
}
72
74
}
@@ -99,7 +101,7 @@ pub fn init_logger(cfg: LoggerConfig) -> Result<(), Error> {
99
101
Err ( _) => false ,
100
102
} ;
101
103
102
- let layer = tracing_tree:: HierarchicalLayer :: default ( )
104
+ let mut layer = tracing_tree:: HierarchicalLayer :: default ( )
103
105
. with_writer ( io:: stderr)
104
106
. with_indent_lines ( true )
105
107
. with_ansi ( color_logs)
@@ -110,6 +112,16 @@ pub fn init_logger(cfg: LoggerConfig) -> Result<(), Error> {
110
112
. with_thread_ids ( verbose_thread_ids)
111
113
. with_thread_names ( verbose_thread_ids) ;
112
114
115
+ match cfg. wraptree {
116
+ Ok ( v) => match v. parse :: < usize > ( ) {
117
+ Ok ( v) => {
118
+ layer = layer. with_wraparound ( v) ;
119
+ }
120
+ Err ( _) => return Err ( Error :: InvalidWraptree ( v) ) ,
121
+ } ,
122
+ Err ( _) => { } // no wraptree
123
+ }
124
+
113
125
let subscriber = tracing_subscriber:: Registry :: default ( ) . with ( filter) . with ( layer) ;
114
126
match cfg. backtrace {
115
127
Ok ( str) => {
@@ -164,6 +176,7 @@ pub fn stderr_isatty() -> bool {
164
176
pub enum Error {
165
177
InvalidColorValue ( String ) ,
166
178
NonUnicodeColorValue ,
179
+ InvalidWraptree ( String ) ,
167
180
}
168
181
169
182
impl std:: error:: Error for Error { }
@@ -179,6 +192,10 @@ impl Display for Error {
179
192
formatter,
180
193
"non-Unicode log color value: expected one of always, never, or auto" ,
181
194
) ,
195
+ Error :: InvalidWraptree ( value) => write ! (
196
+ formatter,
197
+ "invalid log WRAPTREE value '{value}': expected a non-negative integer" ,
198
+ ) ,
182
199
}
183
200
}
184
201
}
0 commit comments