Selaa lähdekoodia

@bplatak feat(pyth-lazer-agent) Make the logging format configurable (#2880)

Bart Platak 4 kuukautta sitten
vanhempi
sitoutus
8d850772b6
1 muutettua tiedostoa jossa 39 lisäystä ja 15 poistoa
  1. 39 15
      apps/pyth-lazer-agent/src/main.rs

+ 39 - 15
apps/pyth-lazer-agent/src/main.rs

@@ -1,3 +1,4 @@
+use serde::Deserialize;
 use {
     crate::lazer_publisher::LazerPublisher,
     anyhow::Context,
@@ -14,38 +15,61 @@ mod publisher_handle;
 mod relayer_session;
 mod websocket_utils;
 
-#[derive(Parser)]
+#[derive(Parser, Deserialize)]
 #[command(version)]
 struct Cli {
     #[clap(short, long, default_value = "config/config.toml")]
     config: String,
+    #[clap(short, long, default_value = "json")]
+    log_format: LogFormat,
+}
+
+#[derive(clap::ValueEnum, Clone, Deserialize, Default)]
+enum LogFormat {
+    #[default]
+    Json,
+    Compact,
+    Pretty,
 }
 
 #[tokio::main]
 async fn main() -> anyhow::Result<()> {
+    let args = Cli::parse();
+    init_tracing_subscriber(args.log_format);
+
+    let config =
+        config::load_config(args.config.to_string()).context("Failed to read config file")?;
+    info!(?config, "starting lazer-agent");
+
+    let lazer_publisher = LazerPublisher::new(&config).await;
+    http_server::run(config, lazer_publisher).await?;
+
+    Ok(())
+}
+
+fn init_tracing_subscriber(log_format: LogFormat) {
     #[allow(
         clippy::expect_used,
         reason = "application can fail on invalid RUST_LOG"
     )]
-    tracing_subscriber::fmt()
+    let subscriber = tracing_subscriber::fmt()
         .with_env_filter(
             EnvFilter::builder()
                 .with_default_directive(LevelFilter::INFO.into())
                 .from_env()
                 .expect("invalid RUST_LOG env var"),
         )
-        .with_span_events(FmtSpan::NONE)
-        .json()
-        .with_span_list(false)
-        .init();
+        .with_span_events(FmtSpan::NONE);
 
-    let args = Cli::parse();
-    let config =
-        config::load_config(args.config.to_string()).context("Failed to read config file")?;
-    info!(?config, "starting lazer-agent");
-
-    let lazer_publisher = LazerPublisher::new(&config).await;
-    http_server::run(config, lazer_publisher).await?;
-
-    Ok(())
+    match log_format {
+        LogFormat::Json => {
+            subscriber.json().with_span_list(false).init();
+        }
+        LogFormat::Compact => {
+            subscriber.compact().init();
+        }
+        LogFormat::Pretty => {
+            subscriber.pretty().init();
+        }
+    }
 }