rhythm-backend/src/logging.rs

63 lines
1.8 KiB
Rust

use tracing_appender::{
non_blocking::WorkerGuard,
rolling::{RollingFileAppender, Rotation},
};
use tracing_subscriber::{EnvFilter, layer::SubscriberExt, util::SubscriberInitExt};
use tracing_tree::HierarchicalLayer;
use crate::config::AppEnv;
pub struct LoggerConfig {
_guard: Option<WorkerGuard>,
}
impl LoggerConfig {
pub fn init(app_env: AppEnv) -> Self {
match app_env {
AppEnv::Development => {
Self::init_dev();
Self { _guard: None }
}
AppEnv::Production => {
let guard = Self::init_prod();
Self {
_guard: Some(guard),
}
}
}
}
fn init_dev() {
let env_filter =
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("debug"));
let layer = HierarchicalLayer::new(1).with_ansi(true).with_targets(true);
tracing_subscriber::registry()
.with(env_filter)
.with(layer)
.init();
}
fn init_prod() -> WorkerGuard {
let env_filter =
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
let file_appender = RollingFileAppender::new(Rotation::DAILY, "./logs", "app.log");
let (non_blocking, guard) = tracing_appender::non_blocking(file_appender);
let file_layer = HierarchicalLayer::new(1)
.with_writer(non_blocking)
.with_ansi(false)
.with_targets(true)
.with_thread_names(true);
let console_layer = HierarchicalLayer::new(2).with_ansi(true).with_targets(true);
tracing_subscriber::registry()
.with(env_filter)
.with(file_layer)
.with(console_layer)
.init();
guard
}
}