@@ -57,6 +57,7 @@ pub struct LoggerConfig {
5757 pub  verbose_entry_exit :  Result < String ,  VarError > , 
5858 pub  verbose_thread_ids :  Result < String ,  VarError > , 
5959 pub  backtrace :  Result < String ,  VarError > , 
60+  pub  wraptree :  Result < String ,  VarError > , 
6061} 
6162
6263impl  LoggerConfig  { 
@@ -67,6 +68,7 @@ impl LoggerConfig {
6768 verbose_entry_exit :  env:: var ( format ! ( "{env}_ENTRY_EXIT" ) ) , 
6869 verbose_thread_ids :  env:: var ( format ! ( "{env}_THREAD_IDS" ) ) , 
6970 backtrace :  env:: var ( format ! ( "{env}_BACKTRACE" ) ) , 
71+  wraptree :  env:: var ( format ! ( "{env}_WRAPTREE" ) ) , 
7072 } 
7173 } 
7274} 
@@ -99,7 +101,7 @@ pub fn init_logger(cfg: LoggerConfig) -> Result<(), Error> {
99101 Err ( _)  => false , 
100102 } ; 
101103
102-  let  layer = tracing_tree:: HierarchicalLayer :: default ( ) 
104+  let  mut   layer = tracing_tree:: HierarchicalLayer :: default ( ) 
103105 . with_writer ( io:: stderr) 
104106 . with_indent_lines ( true ) 
105107 . with_ansi ( color_logs) 
@@ -110,6 +112,16 @@ pub fn init_logger(cfg: LoggerConfig) -> Result<(), Error> {
110112 . with_thread_ids ( verbose_thread_ids) 
111113 . with_thread_names ( verbose_thread_ids) ; 
112114
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+ 
113125 let  subscriber = tracing_subscriber:: Registry :: default ( ) . with ( filter) . with ( layer) ; 
114126 match  cfg. backtrace  { 
115127 Ok ( str)  => { 
@@ -164,6 +176,7 @@ pub fn stderr_isatty() -> bool {
164176pub  enum  Error  { 
165177 InvalidColorValue ( String ) , 
166178 NonUnicodeColorValue , 
179+  InvalidWraptree ( String ) , 
167180} 
168181
169182impl  std:: error:: Error  for  Error  { } 
@@ -179,6 +192,10 @@ impl Display for Error {
179192 formatter, 
180193 "non-Unicode log color value: expected one of always, never, or auto" , 
181194 ) , 
195+  Error :: InvalidWraptree ( value)  => write ! ( 
196+  formatter, 
197+  "invalid log WRAPTREE value '{value}': expected a non-negative integer" , 
198+  ) , 
182199 } 
183200 } 
184201} 
0 commit comments