1
+ use serde:: Deserialize ;
1
2
use {
2
3
crate :: lazer_publisher:: LazerPublisher ,
3
4
anyhow:: Context ,
@@ -14,38 +15,61 @@ mod publisher_handle;
14
15
mod relayer_session;
15
16
mod websocket_utils;
16
17
17
- #[ derive( Parser ) ]
18
+ #[ derive( Parser , Deserialize ) ]
18
19
#[ command( version) ]
19
20
struct Cli {
20
21
#[ clap( short, long, default_value = "config/config.toml" ) ]
21
22
config : String ,
23
+ #[ clap( short, long, default_value = "json" ) ]
24
+ log_format : LogFormat ,
25
+ }
26
+
27
+ #[ derive( clap:: ValueEnum , Clone , Deserialize , Default ) ]
28
+ enum LogFormat {
29
+ #[ default]
30
+ Json ,
31
+ Compact ,
32
+ Pretty ,
22
33
}
23
34
24
35
#[ tokio:: main]
25
36
async fn main ( ) -> anyhow:: Result < ( ) > {
37
+ let args = Cli :: parse ( ) ;
38
+ init_tracing_subscriber ( args. log_format ) ;
39
+
40
+ let config =
41
+ config:: load_config ( args. config . to_string ( ) ) . context ( "Failed to read config file" ) ?;
42
+ info ! ( ?config, "starting lazer-agent" ) ;
43
+
44
+ let lazer_publisher = LazerPublisher :: new ( & config) . await ;
45
+ http_server:: run ( config, lazer_publisher) . await ?;
46
+
47
+ Ok ( ( ) )
48
+ }
49
+
50
+ fn init_tracing_subscriber ( log_format : LogFormat ) {
26
51
#[ allow(
27
52
clippy:: expect_used,
28
53
reason = "application can fail on invalid RUST_LOG"
29
54
) ]
30
- tracing_subscriber:: fmt ( )
55
+ let subscriber = tracing_subscriber:: fmt ( )
31
56
. with_env_filter (
32
57
EnvFilter :: builder ( )
33
58
. with_default_directive ( LevelFilter :: INFO . into ( ) )
34
59
. from_env ( )
35
60
. expect ( "invalid RUST_LOG env var" ) ,
36
61
)
37
- . with_span_events ( FmtSpan :: NONE )
38
- . json ( )
39
- . with_span_list ( false )
40
- . init ( ) ;
62
+ . with_span_events ( FmtSpan :: NONE ) ;
41
63
42
- let args = Cli :: parse ( ) ;
43
- let config =
44
- config:: load_config ( args. config . to_string ( ) ) . context ( "Failed to read config file" ) ?;
45
- info ! ( ?config, "starting lazer-agent" ) ;
46
-
47
- let lazer_publisher = LazerPublisher :: new ( & config) . await ;
48
- http_server:: run ( config, lazer_publisher) . await ?;
49
-
50
- Ok ( ( ) )
64
+ match log_format {
65
+ LogFormat :: Json => {
66
+ subscriber. json ( ) . with_span_list ( false ) . init ( ) ;
67
+ }
68
+ LogFormat :: Compact => {
69
+ subscriber. compact ( ) . init ( ) ;
70
+ }
71
+ LogFormat :: Pretty => {
72
+ subscriber. pretty ( ) . init ( ) ;
73
+ }
74
+ }
51
75
}
0 commit comments