@@ -26,6 +26,7 @@ use tracing_bunyan_formatter::{BunyanFormattingLayer, JsonStorageLayer};
2626use tracing_log:: LogTracer ;
2727use tracing_subscriber:: fmt:: Layer ;
2828use tracing_subscriber:: layer:: SubscriberExt ;
29+ use tracing_subscriber:: prelude:: * ;
2930use tracing_subscriber:: { filter, EnvFilter , Registry } ;
3031
3132pub use crate :: { debug, error, info, log, trace, warn} ;
@@ -77,6 +78,15 @@ pub fn init_global_logging(
7778 let file_logging_layer = BunyanFormattingLayer :: new ( app_name. to_string ( ) , rolling_writer) ;
7879 guards. push ( rolling_writer_guard) ;
7980
81+ // error JSON log layer.
82+ let err_rolling_appender =
83+ RollingFileAppender :: new ( Rotation :: HOURLY , dir, format ! ( "{}-{}" , app_name, "err" ) ) ;
84+ let ( err_rolling_writer, err_rolling_writer_guard) =
85+ tracing_appender:: non_blocking ( err_rolling_appender) ;
86+ let err_file_logging_layer =
87+ BunyanFormattingLayer :: new ( app_name. to_string ( ) , err_rolling_writer) ;
88+ guards. push ( err_rolling_writer_guard) ;
89+
8090 // Use env RUST_LOG to initialize log if present.
8191 // Otherwise use the specified level.
8292 let directives = env:: var ( EnvFilter :: DEFAULT_ENV ) . unwrap_or_else ( |_x| level. to_string ( ) ) ;
@@ -99,7 +109,8 @@ pub fn init_global_logging(
99109 . with ( filter)
100110 . with ( JsonStorageLayer )
101111 . with ( stdout_logging_layer)
102- . with ( file_logging_layer) ;
112+ . with ( file_logging_layer)
113+ . with ( err_file_logging_layer. with_filter ( filter:: LevelFilter :: ERROR ) ) ;
103114
104115 // Must enable 'tokio_unstable' cfg, https://github.com/tokio-rs/console
105116 #[ cfg( feature = "console" ) ]
0 commit comments