use tracing_appender::rolling::{RollingFileAppender, Rotation};
pub struct LogGuard {
_guard: tracing_appender::non_blocking::WorkerGuard,
}
pub fn init_logging(filter: tracing_subscriber::EnvFilter) -> LogGuard {
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
let log_dir = crate::unlost_data_root().join("logs");
std::fs::create_dir_all(&log_dir).ok();
let file_appender = RollingFileAppender::new(Rotation::DAILY, &log_dir, "unlost.log");
let (non_blocking, guard) = tracing_appender::non_blocking(file_appender);
tracing_subscriber::registry()
.with(filter)
.with(
tracing_subscriber::fmt::layer()
.with_writer(std::io::stderr)
.with_ansi(true),
)
.with(
tracing_subscriber::fmt::layer()
.with_writer(non_blocking)
.with_ansi(false),
)
.init();
LogGuard { _guard: guard }
}
pub fn init_logging_file_only(filter: tracing_subscriber::EnvFilter) -> LogGuard {
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
let log_dir = crate::unlost_data_root().join("logs");
std::fs::create_dir_all(&log_dir).ok();
let file_appender = RollingFileAppender::new(Rotation::DAILY, &log_dir, "unlost.log");
let (non_blocking, guard) = tracing_appender::non_blocking(file_appender);
tracing_subscriber::registry()
.with(filter)
.with(
tracing_subscriber::fmt::layer()
.with_writer(non_blocking)
.with_ansi(false),
)
.init();
LogGuard { _guard: guard }
}
pub fn create_filter(level: &str) -> tracing_subscriber::EnvFilter {
tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| {
tracing_subscriber::EnvFilter::new(format!("unlost={},lance=warn,lancedb=warn", level))
})
}