@@ -3,12 +3,15 @@ use std::net::IpAddr;
3
3
use anyhow:: Result ;
4
4
use bore_cli:: { client:: Client , server:: Server } ;
5
5
use clap:: { error:: ErrorKind , CommandFactory , Parser , Subcommand } ;
6
+ use tracing;
6
7
7
8
#[ derive( Parser , Debug ) ]
8
9
#[ clap( author, version, about) ]
9
10
struct Args {
10
11
#[ clap( subcommand) ]
11
12
command : Command ,
13
+ #[ arg( long) ]
14
+ log_path : Option < String > ,
12
15
}
13
16
14
17
#[ derive( Subcommand , Debug ) ]
@@ -96,7 +99,33 @@ async fn run(command: Command) -> Result<()> {
96
99
Ok ( ( ) )
97
100
}
98
101
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
+
99
127
fn 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 ( ) ) ;
101
130
run ( Args :: parse ( ) . command )
102
131
}
0 commit comments