@@ -3,12 +3,15 @@ use std::net::IpAddr;
33use anyhow:: Result ;
44use bore_cli:: { client:: Client , server:: Server } ;
55use clap:: { error:: ErrorKind , CommandFactory , Parser , Subcommand } ;
6+ use tracing;
67
78#[ derive( Parser , Debug ) ]
89#[ clap( author, version, about) ]
910struct Args {
1011 #[ clap( subcommand) ]
1112 command : Command ,
13+ #[ arg( long) ]
14+ log_path : Option < String > ,
1215}
1316
1417#[ derive( Subcommand , Debug ) ]
@@ -96,7 +99,33 @@ async fn run(command: Command) -> Result<()> {
9699 Ok ( ( ) )
97100}
98101
102+ fn setup_logging ( log_path : Option < & String > ) -> Result < tracing_appender:: non_blocking:: WorkerGuard > {
103+ match log_path {
104+ Some ( x) => {
105+ let file_appender = tracing_appender:: rolling:: daily ( x, "bore_server.log" ) ;
106+ let ( non_blocking, guard) = tracing_appender:: non_blocking ( file_appender) ;
107+ let subscriber = tracing_subscriber:: fmt ( )
108+ . with_writer ( non_blocking)
109+ . with_ansi ( false )
110+ . finish ( ) ;
111+ tracing:: subscriber:: set_global_default ( subscriber)
112+ . expect ( "setting up trace logging failed" ) ;
113+ Ok ( guard)
114+ }
115+ None => {
116+ let ( non_blocking, guard) = tracing_appender:: non_blocking ( std:: io:: stdout ( ) ) ;
117+ let subscriber = tracing_subscriber:: fmt ( )
118+ . with_writer ( non_blocking)
119+ . finish ( ) ;
120+ tracing:: subscriber:: set_global_default ( subscriber)
121+ . expect ( "setting up trace logging failed" ) ;
122+ Ok ( guard)
123+ }
124+ }
125+ }
126+
99127fn main ( ) -> Result < ( ) > {
100- tracing_subscriber:: fmt:: init ( ) ;
128+ // _ to persist the global logger guard
129+ let _guard = setup_logging ( Args :: parse ( ) . log_path . as_ref ( ) ) ;
101130 run ( Args :: parse ( ) . command )
102131}
0 commit comments