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
40 lines
1.3 KiB
Rust
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)
|
|
}
|