Private
Public Access
1
0
Files
linux_patch_api/src/logging/init.rs
Echo 24e7d9a796
Some checks failed
CI/CD Pipeline / Code Format (push) Successful in 11s
CI/CD Pipeline / Clippy Lints (push) Failing after 5m21s
CI/CD Pipeline / Unit Tests (push) Failing after 5m28s
CI/CD Pipeline / Security Audit (push) Successful in 1m47s
CI/CD Pipeline / Build Debian Package (push) Failing after 1s
CI/CD Pipeline / Build RPM Package (push) Failing after 1s
CI/CD Pipeline / Build Alpine Package (push) Failing after 2s
CI/CD Pipeline / Build Arch Package (push) Failing after 2s
CI/CD Pipeline / Create Release (push) Has been skipped
Apply cargo fmt formatting to fix CI/CD fmt job
2026-04-12 14:13:36 +00:00

40 lines
1.3 KiB
Rust

//! Logging Initialization
//!
//! Sets up tracing with systemd journal and file appender support.
use anyhow::Result;
use tracing_appender::non_blocking::WorkerGuard;
use tracing_subscriber::{fmt, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
/// Initialize logging with tracing
///
/// Sets up:
/// - Env-based log level filtering
/// - JSON formatting for machine readability
/// - systemd journal integration
/// - File appender fallback to /var/log/linux_patch_api/
pub fn init_logging(verbose: bool) -> Result<WorkerGuard> {
let log_level = if verbose { "debug" } else { "info" };
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(log_level));
let file_appender = tracing_appender::rolling::daily("/var/log/linux_patch_api", "audit.log");
let (non_blocking, guard) = tracing_appender::non_blocking(file_appender);
let file_layer = fmt::layer()
.with_writer(non_blocking)
.with_ansi(false)
.with_target(true)
.with_thread_ids(true);
let stdout_layer = fmt::layer().with_writer(std::io::stdout).with_ansi(true);
tracing_subscriber::registry()
.with(filter)
.with(file_layer)
.with(stdout_layer)
.try_init()
.ok(); // Ignore if already initialized
Ok(guard)
}