diff options
| -rw-r--r-- | warden/src/config/cli/mod.rs | 9 | ||||
| -rw-r--r-- | warden/src/config/mod.rs | 12 | ||||
| -rw-r--r-- | warden/src/logging/mod.rs | 5 | ||||
| -rw-r--r-- | warden/src/main.rs | 3 | ||||
| -rw-r--r-- | warden/src/server/mod.rs | 0 |
5 files changed, 22 insertions, 7 deletions
diff --git a/warden/src/config/cli/mod.rs b/warden/src/config/cli/mod.rs index aa98ca8..1aa33b6 100644 --- a/warden/src/config/cli/mod.rs +++ b/warden/src/config/cli/mod.rs @@ -11,7 +11,6 @@ pub struct Cli { #[arg(short, long, value_name = "FILE")] #[serde(skip)] pub config: Option<PathBuf>, - #[command(flatten)] pub server: Server, #[command(subcommand)] @@ -37,11 +36,14 @@ pub struct Server { #[arg(value_parser = clap::value_parser!(u16).range(1..=65535))] pub port: Option<u16>, /// Runtime environment - #[arg(short, long, value_name = "ENV", default_value = "prod")] + #[arg(short, long, value_name = "ENV", default_value = "prod", env = "ENV")] pub environment: Option<CliEnvironment>, /// Log Level - #[arg(short, long, value_name = "LOG_LEVEL")] + #[arg(long, value_name = "LOG_LEVEL", env = "LOG_LEVEL")] pub log_level: Option<String>, + /// Log file directory (defaults to temp_dir) + #[arg(long, value_name = "DIR", env = "LOGS_DIR")] + pub log_dir: Option<PathBuf>, } impl Default for Server { @@ -53,6 +55,7 @@ impl Default for Server { "{}=debug,tower_http=debug,axum::rejection=trace", env!("CARGO_CRATE_NAME") )), + log_dir: Some(std::env::temp_dir()) } } } diff --git a/warden/src/config/mod.rs b/warden/src/config/mod.rs index b2e5307..3e2e5a8 100644 --- a/warden/src/config/mod.rs +++ b/warden/src/config/mod.rs @@ -1,6 +1,8 @@ mod cli; mod log_level; +use std::path::PathBuf; + use clap::ValueEnum; pub use cli::Cli; pub use cli::Commands; @@ -36,6 +38,7 @@ pub struct Server { pub port: u16, pub environment: Environment, pub log_level: EnvFilter, + pub log_dir: PathBuf, } impl Default for Server { @@ -52,6 +55,7 @@ impl Default for Server { ) .into() }), + log_dir: std::env::temp_dir() } } } @@ -65,6 +69,13 @@ impl Configuration { missing.push("server.port"); } + let log_dir = cli + .server + .log_dir + .clone() + .or(file.server.log_dir.clone()) + .unwrap_or_else(std::env::temp_dir); + let log_level = cli .server .log_level @@ -102,6 +113,7 @@ impl Configuration { port: port.unwrap(), environment, log_level: log_level.into(), + log_dir }, }) } diff --git a/warden/src/logging/mod.rs b/warden/src/logging/mod.rs index d24c750..abe4c15 100644 --- a/warden/src/logging/mod.rs +++ b/warden/src/logging/mod.rs @@ -1,4 +1,4 @@ -use std::env; +use std::{env, path::PathBuf}; use tracing_appender::rolling::{RollingFileAppender, Rotation}; use tracing_subscriber::{EnvFilter, layer::SubscriberExt, util::SubscriberInitExt}; @@ -6,9 +6,8 @@ pub type LogHandle = tracing_subscriber::reload::Handle<EnvFilter, tracing_subsc pub fn initialise_logging( level: &EnvFilter, + log_dir: &PathBuf, ) -> (LogHandle, tracing_appender::non_blocking::WorkerGuard) { - let log_dir = env::temp_dir(); - let file_appender = RollingFileAppender::new(Rotation::DAILY, log_dir, env!("CARGO_PKG_NAME")); let (non_blocking, guard) = tracing_appender::non_blocking(file_appender); diff --git a/warden/src/main.rs b/warden/src/main.rs index 839bd3c..0b0383f 100644 --- a/warden/src/main.rs +++ b/warden/src/main.rs @@ -16,6 +16,7 @@ use crate::{ mod config; mod logging; +mod server; mod state; #[tokio::main] @@ -35,7 +36,7 @@ async fn main() -> anyhow::Result<()> { }; let config = Configuration::merge(&cli, &config)?; - let (log_handle, _guard) = logging::initialise_logging(&config.server.log_level); + let (log_handle, _guard) = logging::initialise_logging(&config.server.log_level, &config.server.log_dir); let state = Arc::new(AppState::new(log_handle)); diff --git a/warden/src/server/mod.rs b/warden/src/server/mod.rs new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/warden/src/server/mod.rs |
