diff --git a/src/config.rs b/src/config.rs index 706c325..8080cb1 100644 --- a/src/config.rs +++ b/src/config.rs @@ -10,6 +10,8 @@ pub struct GlazedConfig { pub bind_address: SocketAddr, pub public_address: Option, pub tiled_client: TiledClientConfig, + #[serde(default)] + pub log_level: LogLevel, } impl GlazedConfig { pub fn from_file(path: &Path) -> Result { @@ -24,6 +26,7 @@ impl GlazedConfig { tiled_client: TiledClientConfig { address: Url::parse("http://localhost:8000").expect("Static URL is valid"), }, + log_level: LogLevel::Info, } } } @@ -32,3 +35,38 @@ impl GlazedConfig { pub struct TiledClientConfig { pub address: Url, } + +#[derive(Debug, Default, Deserialize, Clone, Copy)] +pub enum LogLevel { + #[default] + #[serde(alias = "info")] + Info, + #[serde(alias = "debug")] + Debug, + #[serde(alias = "trace")] + Trace, +} + +impl From for tracing::level_filters::LevelFilter { + fn from(value: LogLevel) -> Self { + match value { + LogLevel::Info => Self::INFO, + LogLevel::Debug => Self::DEBUG, + LogLevel::Trace => Self::TRACE, + } + } +} + +#[cfg(test)] +mod tests { + use tracing::level_filters::LevelFilter; + + use crate::config::LogLevel; + + #[test] + fn level_conversion() { + assert_eq!(LevelFilter::from(LogLevel::Info), LevelFilter::INFO); + assert_eq!(LevelFilter::from(LogLevel::Debug), LevelFilter::DEBUG); + assert_eq!(LevelFilter::from(LogLevel::Trace), LevelFilter::TRACE); + } +} diff --git a/src/main.rs b/src/main.rs index 914bea3..892cc27 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,6 +18,10 @@ use serde_json::json; use tokio::select; use tokio::signal::unix::{SignalKind, signal}; use tracing::info; +use tracing::level_filters::LevelFilter; +use tracing_subscriber::fmt; +use tracing_subscriber::layer::SubscriberExt as _; +use tracing_subscriber::util::SubscriberInitExt; use url::Url; use crate::clients::TiledClient; @@ -27,9 +31,6 @@ use crate::model::TiledQuery; #[tokio::main] async fn main() -> Result<(), Box> { - let subscriber = tracing_subscriber::FmtSubscriber::new(); - tracing::subscriber::set_global_default(subscriber)?; - let cli = Cli::init(); let config; @@ -41,6 +42,11 @@ async fn main() -> Result<(), Box> { info!("Using default config"); config = GlazedConfig::default(); } + tracing_subscriber::registry() + .with(LevelFilter::from(config.log_level)) + .with(fmt::Layer::default()) + .init(); + match cli.command { Commands::Serve => serve(config).await, } diff --git a/src/model.rs b/src/model.rs index bd301df..b1cb3a9 100644 --- a/src/model.rs +++ b/src/model.rs @@ -10,7 +10,7 @@ use std::collections::HashMap; use async_graphql::{Context, Object, Result, Union}; use serde_json::Value; -use tracing::{info, instrument}; +use tracing::instrument; use crate::RootAddress; use crate::clients::{ClientError, TiledClient}; @@ -175,7 +175,6 @@ impl TableData { .map(|s| s.as_str()) .collect::>() .join("/"); - info!("path: {:?}", p); let table_data = client.table_full(&p, columns, headers).await?; Ok(table_data)