@@ -52,7 +52,7 @@ pub struct ChromeLayerBuilder<S>
5252where
5353 S : Subscriber + for < ' span > LookupSpan < ' span > + Send + Sync ,
5454{
55- out_writer : Option < Box < dyn Write + Send > > ,
55+ out_writer : Option < Box < dyn FnOnce ( ) -> Box < dyn Write > + Send > > ,
5656 name_fn : Option < NameFn < S > > ,
5757 cat_fn : Option < NameFn < S > > ,
5858 include_args : bool ,
9797 ///
9898 /// If `file` could not be opened/created. To handle errors,
9999 /// open a file and pass it to [`writer`](crate::ChromeLayerBuilder::writer) instead.
100- pub fn file < P : AsRef < Path > > ( self , file : P ) -> Self {
100+ pub fn file < P : AsRef < Path > + Send + ' static > ( self , file : P ) -> Self {
101101 self . writer ( std:: fs:: File :: create ( file) . expect ( "Failed to create trace file." ) )
102102 }
103103
@@ -112,7 +112,7 @@ where
112112 /// # tracing_subscriber::registry().with(layer).init();
113113 /// ```
114114 pub fn writer < W : Write + Send + ' static > ( mut self , writer : W ) -> Self {
115- self . out_writer = Some ( Box :: new ( writer) ) ;
115+ self . out_writer = Some ( Box :: new ( || Box :: new ( writer) ) ) ;
116116 self
117117 }
118118
@@ -285,11 +285,10 @@ where
285285 let ( tx, rx) = mpsc:: channel ( ) ;
286286 OUT . with ( |val| val. replace ( Some ( tx. clone ( ) ) ) ) ;
287287
288- let out_writer = builder
289- . out_writer
290- . unwrap_or_else ( || create_default_writer ( ) ) ;
288+ let out_writer = builder. out_writer ;
291289
292290 let handle = std:: thread:: spawn ( move || {
291+ let out_writer = out_writer. map_or_else ( || create_default_writer ( ) as _ , |f| f ( ) ) ;
293292 let mut write = BufWriter :: new ( out_writer) ;
294293 write. write_all ( b"[\n " ) . unwrap ( ) ;
295294
0 commit comments