63 lines
1.8 KiB
Rust
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
|
|
}
|
|
}
|