Skip to content

Commit c219d32

Browse files
avi-starkwareclaude
andcommitted
starknet_transaction_prover: add --log-format text|json CLI flag
Adds a LogFormat enum and `--log-format` / `LOG_FORMAT=text|json` selector that switches the tracing subscriber between the text and JSON formatters. Default is text. Matches the discovery-service convention. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 81fb8b8 commit c219d32

3 files changed

Lines changed: 30 additions & 8 deletions

File tree

crates/starknet_transaction_prover/src/main.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ async fn main() -> anyhow::Result<()> {
1414

1515
use anyhow::Context;
1616
use clap::Parser;
17-
use starknet_transaction_prover::server::config::{CliArgs, ServiceConfig, TransportMode};
17+
use starknet_transaction_prover::server::config::{
18+
CliArgs,
19+
LogFormat,
20+
ServiceConfig,
21+
TransportMode,
22+
};
1823
use starknet_transaction_prover::server::cors::{build_cors_layer, cors_mode};
1924
use starknet_transaction_prover::server::rpc_api::ProvingRpcServer;
2025
use starknet_transaction_prover::server::rpc_impl::ProvingRpcServerImpl;
@@ -28,16 +33,18 @@ async fn main() -> anyhow::Result<()> {
2833
use tracing_subscriber::prelude::*;
2934
use tracing_subscriber::{fmt, EnvFilter};
3035

36+
let args = CliArgs::parse();
37+
3138
// TODO(Avi): Revisit the starknet_transaction_prover=debug default once the service stabilizes.
32-
// Initialize tracing with RUST_LOG. By default, keep service logs and lower third-party
33-
// logs to warn.
3439
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| {
3540
EnvFilter::new("warn,starknet_transaction_prover=debug,privacy_prove=info")
3641
});
37-
tracing_subscriber::registry().with(fmt::layer()).with(filter).init();
42+
let registry = tracing_subscriber::registry().with(filter);
43+
match args.log_format {
44+
LogFormat::Json => registry.with(fmt::layer().json()).init(),
45+
LogFormat::Text => registry.with(fmt::layer()).init(),
46+
}
3847

39-
// Parse CLI args and load config.
40-
let args = CliArgs::parse();
4148
let config = ServiceConfig::from_args(args)?;
4249

4350
// Build and start the JSON-RPC server.

crates/starknet_transaction_prover/src/server/config.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::str::FromStr;
66

77
use blockifier::blockifier::config::ContractClassManagerConfig;
88
use blockifier::bouncer::BouncerConfig;
9-
use clap::Parser;
9+
use clap::{Parser, ValueEnum};
1010
use serde::{Deserialize, Serialize};
1111
use starknet_api::core::{ChainId, ContractAddress};
1212
use tracing::info;
@@ -38,6 +38,15 @@ pub enum TransportMode {
3838
Https { tls_cert_file: PathBuf, tls_key_file: PathBuf },
3939
}
4040

41+
/// Output format for tracing log records.
42+
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, ValueEnum)]
43+
#[clap(rename_all = "lowercase")]
44+
pub enum LogFormat {
45+
#[default]
46+
Text,
47+
Json,
48+
}
49+
4150
impl TransportMode {
4251
/// Constructs a `TransportMode` from optional cert and key paths.
4352
///
@@ -547,6 +556,10 @@ pub struct CliArgs {
547556
#[arg(long, value_name = "SECS", env = "OHTTP_KEY_CACHE_MAX_AGE_SECS")]
548557
pub ohttp_key_cache_max_age_secs: Option<u64>,
549558

559+
/// Log output format. Use `json` in production so log aggregators parse fields directly.
560+
#[arg(long, value_enum, value_name = "FORMAT", env = "LOG_FORMAT", default_value_t = LogFormat::Text)]
561+
pub log_format: LogFormat,
562+
550563
/// Hidden escape hatch: override the embedded bouncer config (block capacity limits) with a
551564
/// custom JSON file. Not advertised because the embedded defaults are tuned for this prover
552565
/// (including high `l1_gas` / `message_segment_length`: virtual OS output is not L1-bound; it

crates/starknet_transaction_prover/src/server/config_test.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use rstest::rstest;
77
use tempfile::NamedTempFile;
88

99
use crate::errors::ConfigError;
10-
use crate::server::config::{CliArgs, ServiceConfig, TransportMode};
10+
use crate::server::config::{CliArgs, LogFormat, ServiceConfig, TransportMode};
1111

1212
/// Mutex that serializes tests which modify environment variables.
1313
static ENV_MUTEX: Mutex<()> = Mutex::new(());
@@ -59,6 +59,7 @@ fn base_args() -> CliArgs {
5959
max_request_body_size: None,
6060
ohttp_enabled: false,
6161
ohttp_key_cache_max_age_secs: None,
62+
log_format: LogFormat::Text,
6263
}
6364
}
6465

@@ -147,6 +148,7 @@ fn cors_allow_origin_rejects_non_array_in_config_file() {
147148
max_request_body_size: None,
148149
ohttp_enabled: false,
149150
ohttp_key_cache_max_age_secs: None,
151+
log_format: LogFormat::Text,
150152
};
151153

152154
let error = ServiceConfig::from_args(args).unwrap_err();

0 commit comments

Comments
 (0)