diff --git a/server/src/main.rs b/server/src/main.rs index e9ef357..0515f07 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,6 +1,12 @@ use std::sync::Arc; use tokio::net::TcpListener; +use tower_http::limit::RequestBodyLimitLayer; +use tower_http::trace::TraceLayer; +use tracing::info; +use tracing_subscriber::layer::SubscriberExt; +use tracing_subscriber::util::SubscriberInitExt; +use tracing_subscriber::EnvFilter; use doctate_server::config::Config; @@ -9,10 +15,35 @@ async fn main() { dotenvy::dotenv().ok(); let config = Arc::new(Config::from_env()); - let addr = format!("0.0.0.0:{}", config.server_port); - println!("Server starting on {addr}"); + // Logging: stdout + daily rotating log files. + let env_filter = EnvFilter::try_new(&config.log_level) + .unwrap_or_else(|_| EnvFilter::new("info")); + + let file_appender = tracing_appender::rolling::daily(&config.log_path, "recorder.log"); + let (file_writer, _guard) = tracing_appender::non_blocking(file_appender); + + tracing_subscriber::registry() + .with(env_filter) + .with( + tracing_subscriber::fmt::layer() + .with_target(false) + .with_writer(std::io::stdout), + ) + .with( + tracing_subscriber::fmt::layer() + .with_target(false) + .with_ansi(false) + .with_writer(file_writer), + ) + .init(); + + let addr = format!("0.0.0.0:{}", config.server_port); + info!(port = config.server_port, "Server starting"); + + let app = doctate_server::create_router(config) + .layer(TraceLayer::new_for_http()) + .layer(RequestBodyLimitLayer::new(50 * 1024 * 1024)); // 50 MB - let app = doctate_server::create_router(config); let listener = TcpListener::bind(&addr).await.unwrap(); axum::serve(listener, app).await.unwrap(); }