diff --git a/apps/pyth-lazer-agent/src/main.rs b/apps/pyth-lazer-agent/src/main.rs index 7d319a7c4c..28d5acf3ec 100644 --- a/apps/pyth-lazer-agent/src/main.rs +++ b/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(); + } + } }