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