@@ -237,30 +237,50 @@ pub trait SubstrateCli: Sized {
237237 fn native_runtime_version ( chain_spec : & Box < dyn ChainSpec > ) -> & ' static RuntimeVersion ;
238238}
239239
240+ /// The parameters for [`init_logger`].
241+ #[ derive( Default ) ]
242+ pub struct InitLoggerParams {
243+ /// A comma seperated list of logging patterns.
244+ ///
245+ /// E.g.: `test-crate=debug`
246+ pub pattern : String ,
247+ /// The tracing receiver.
248+ pub tracing_receiver : sc_tracing:: TracingReceiver ,
249+ /// Optional comma seperated list of tracing targets.
250+ pub tracing_targets : Option < String > ,
251+ /// Should log reloading be disabled?
252+ pub disable_log_reloading : bool ,
253+ /// Should the log color output be disabled?
254+ pub disable_log_color : bool ,
255+ }
256+
240257/// Initialize the global logger
241258///
242259/// This sets various global logging and tracing instances and thus may only be called once.
243260pub fn init_logger (
244- pattern : & str ,
245- tracing_receiver : sc_tracing:: TracingReceiver ,
246- profiling_targets : Option < String > ,
247- disable_log_reloading : bool ,
261+ InitLoggerParams {
262+ pattern,
263+ tracing_receiver,
264+ tracing_targets,
265+ disable_log_reloading,
266+ disable_log_color,
267+ } : InitLoggerParams ,
248268) -> std:: result:: Result < ( ) , String > {
249269 use sc_tracing:: parse_default_directive;
250270
251271 // Accept all valid directives and print invalid ones
252- fn parse_user_directives ( mut env_filter : EnvFilter , dirs : & str ) -> std:: result:: Result < EnvFilter , String > {
272+ fn parse_user_directives (
273+ mut env_filter : EnvFilter ,
274+ dirs : & str ,
275+ ) -> std:: result:: Result < EnvFilter , String > {
253276 for dir in dirs. split ( ',' ) {
254277 env_filter = env_filter. add_directive ( parse_default_directive ( & dir) ?) ;
255278 }
256279 Ok ( env_filter)
257280 }
258281
259- if let Err ( e) = tracing_log:: LogTracer :: init ( ) {
260- return Err ( format ! (
261- "Registering Substrate logger failed: {:}!" , e
262- ) )
263- }
282+ tracing_log:: LogTracer :: init ( )
283+ . map_err ( |e| format ! ( "Registering Substrate logger failed: {:}!" , e) ) ?;
264284
265285 // Initialize filter - ensure to use `parse_default_directive` for any defaults to persist
266286 // after log filter reloading by RPC
@@ -290,7 +310,7 @@ pub fn init_logger(
290310 if pattern != "" {
291311 // We're not sure if log or tracing is available at this moment, so silently ignore the
292312 // parse error.
293- env_filter = parse_user_directives ( env_filter, pattern) ?;
313+ env_filter = parse_user_directives ( env_filter, & pattern) ?;
294314 }
295315
296316 // If we're only logging `INFO` entries then we'll use a simplified logging format.
@@ -308,11 +328,11 @@ pub fn init_logger(
308328 ) ;
309329
310330 // Make sure to include profiling targets in the filter
311- if let Some ( profiling_targets ) = profiling_targets . clone ( ) {
312- env_filter = parse_user_directives ( env_filter, & profiling_targets ) ?;
331+ if let Some ( tracing_targets ) = tracing_targets . clone ( ) {
332+ env_filter = parse_user_directives ( env_filter, & tracing_targets ) ?;
313333 }
314334
315- let enable_color = atty:: is ( atty:: Stream :: Stderr ) ;
335+ let enable_color = atty:: is ( atty:: Stream :: Stderr ) && !disable_log_color ;
316336 let timer = ChronoLocal :: with_format ( if simple {
317337 "%Y-%m-%d %H:%M:%S" . to_string ( )
318338 } else {
@@ -333,15 +353,15 @@ pub fn init_logger(
333353 let subscriber = subscriber_builder
334354 . finish ( )
335355 . with ( logging:: NodeNameLayer ) ;
336- initialize_tracing ( subscriber, tracing_receiver, profiling_targets )
356+ initialize_tracing ( subscriber, tracing_receiver, tracing_targets )
337357 } else {
338358 let subscriber_builder = subscriber_builder. with_filter_reloading ( ) ;
339359 let handle = subscriber_builder. reload_handle ( ) ;
340360 sc_tracing:: set_reload_handle ( handle) ;
341361 let subscriber = subscriber_builder
342362 . finish ( )
343363 . with ( logging:: NodeNameLayer ) ;
344- initialize_tracing ( subscriber, tracing_receiver, profiling_targets )
364+ initialize_tracing ( subscriber, tracing_receiver, tracing_targets )
345365 }
346366}
347367
@@ -380,7 +400,9 @@ mod tests {
380400 #[ test]
381401 fn test_logger_filters ( ) {
382402 let test_pattern = "afg=debug,sync=trace,client=warn,telemetry,something-with-dash=error" ;
383- init_logger ( & test_pattern, Default :: default ( ) , Default :: default ( ) , false ) . unwrap ( ) ;
403+ init_logger (
404+ InitLoggerParams { pattern : test_pattern. into ( ) , ..Default :: default ( ) } ,
405+ ) . unwrap ( ) ;
384406
385407 tracing:: dispatcher:: get_default ( |dispatcher| {
386408 let test_filter = |target, level| {
@@ -439,7 +461,9 @@ mod tests {
439461 fn log_something_with_dash_target_name ( ) {
440462 if env:: var ( "ENABLE_LOGGING" ) . is_ok ( ) {
441463 let test_pattern = "test-target=info" ;
442- init_logger ( & test_pattern, Default :: default ( ) , Default :: default ( ) , false ) . unwrap ( ) ;
464+ init_logger (
465+ InitLoggerParams { pattern : test_pattern. into ( ) , ..Default :: default ( ) } ,
466+ ) . unwrap ( ) ;
443467
444468 log:: info!( target: "test-target" , "{}" , EXPECTED_LOG_MESSAGE ) ;
445469 }
@@ -475,7 +499,9 @@ mod tests {
475499 fn prefix_in_log_lines_entrypoint ( ) {
476500 if env:: var ( "ENABLE_LOGGING" ) . is_ok ( ) {
477501 let test_pattern = "test-target=info" ;
478- init_logger ( & test_pattern, Default :: default ( ) , Default :: default ( ) , false ) . unwrap ( ) ;
502+ init_logger (
503+ InitLoggerParams { pattern : test_pattern. into ( ) , ..Default :: default ( ) } ,
504+ ) . unwrap ( ) ;
479505 prefix_in_log_lines_process ( ) ;
480506 }
481507 }
@@ -491,7 +517,7 @@ mod tests {
491517 #[ test]
492518 fn do_not_write_with_colors_on_tty_entrypoint ( ) {
493519 if env:: var ( "ENABLE_LOGGING" ) . is_ok ( ) {
494- init_logger ( "" , Default :: default ( ) , Default :: default ( ) , false ) . unwrap ( ) ;
520+ init_logger ( InitLoggerParams :: default ( ) ) . unwrap ( ) ;
495521 log:: info!( "{}" , ansi_term:: Colour :: Yellow . paint( EXPECTED_LOG_MESSAGE ) ) ;
496522 }
497523 }
0 commit comments