@@ -10,11 +10,24 @@ fn main() -> Result<()> {
1010
1111 let log_level_filter = cli. verbose . log_level_filter ( ) ;
1212
13- env_logger:: Builder :: new ( )
13+ let stdout_logger = env_logger:: Builder :: new ( )
1414 . format ( |buf, record| writeln ! ( buf, "{}:\n {}" , record. level( ) , record. args( ) ) )
1515 . filter_level ( log_level_filter)
1616 . target ( env_logger:: fmt:: Target :: Stdout )
17- . init ( ) ;
17+ . build ( ) ;
18+
19+ let stderr_logger = env_logger:: Builder :: new ( )
20+ . format ( |buf, record| writeln ! ( buf, "{}:\n {}" , record. level( ) , record. args( ) ) )
21+ . filter_level ( log_level_filter)
22+ . target ( env_logger:: fmt:: Target :: Stderr )
23+ . build ( ) ;
24+
25+ log:: set_max_level ( log_level_filter) ;
26+ log:: set_boxed_logger ( Box :: new ( SplitLogger {
27+ stdout : stdout_logger,
28+ stderr : stderr_logger,
29+ } ) )
30+ . expect ( "Failed to initialize logger" ) ;
1831
1932 let mut command = cli. command ;
2033
@@ -62,7 +75,7 @@ fn main() -> Result<()> {
6275 ( * build_args. warn_error ) . clone ( ) ,
6376 ) {
6477 Err ( e) => {
65- println ! ( "{:#}" , e) ;
78+ eprintln ! ( "{:#}" , e) ;
6679 std:: process:: exit ( 1 )
6780 }
6881 Ok ( _) => {
@@ -98,7 +111,7 @@ fn main() -> Result<()> {
98111 ( * watch_args. warn_error ) . clone ( ) ,
99112 ) {
100113 Err ( e) => {
101- println ! ( "{:#}" , e) ;
114+ eprintln ! ( "{:#}" , e) ;
102115 std:: process:: exit ( 1 )
103116 }
104117 Ok ( _) => Ok ( ( ) ) ,
@@ -134,9 +147,33 @@ fn main() -> Result<()> {
134147fn get_lock ( folder : & str ) -> lock:: Lock {
135148 match lock:: get ( folder) {
136149 lock:: Lock :: Error ( error) => {
137- println ! ( "Could not start ReScript build: {error}" ) ;
150+ eprintln ! ( "Could not start ReScript build: {error}" ) ;
138151 std:: process:: exit ( 1 ) ;
139152 }
140153 acquired_lock => acquired_lock,
141154 }
142155}
156+
157+ struct SplitLogger {
158+ stdout : env_logger:: Logger ,
159+ stderr : env_logger:: Logger ,
160+ }
161+
162+ impl log:: Log for SplitLogger {
163+ fn enabled ( & self , metadata : & log:: Metadata ) -> bool {
164+ self . stdout . enabled ( metadata) || self . stderr . enabled ( metadata)
165+ }
166+
167+ fn log ( & self , record : & log:: Record ) {
168+ if record. level ( ) == log:: Level :: Error {
169+ self . stderr . log ( record) ;
170+ } else {
171+ self . stdout . log ( record) ;
172+ }
173+ }
174+
175+ fn flush ( & self ) {
176+ self . stdout . flush ( ) ;
177+ self . stderr . flush ( ) ;
178+ }
179+ }
0 commit comments