#[cfg(unix)]
use tracing_subscriber::{filter::EnvFilter, fmt, prelude::*};
#[cfg(not(unix))]
pub fn init() {
}
#[cfg(not(unix))]
pub fn init_debug() {
}
#[cfg(not(unix))]
pub fn init_with_filter(_filter: &str) {
}
#[cfg(not(unix))]
pub fn init_test() {
}
#[cfg(not(unix))]
pub mod examples {
pub fn init_production() {
}
pub fn init_development() {
}
}
#[cfg(unix)]
pub fn init() {
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| {
EnvFilter::new("warn,evlib=info")
});
tracing_subscriber::registry()
.with(
fmt::layer()
.compact()
.with_target(true)
.with_thread_ids(false)
.with_file(false)
.with_line_number(false),
)
.with(filter)
.init();
}
#[cfg(unix)]
pub fn init_debug() {
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| {
EnvFilter::new("info,evlib=debug")
});
tracing_subscriber::registry()
.with(
fmt::layer()
.pretty()
.with_target(true)
.with_thread_ids(true)
.with_file(true)
.with_line_number(true),
)
.with(filter)
.init();
}
#[cfg(unix)]
pub fn init_with_filter(filter: &str) {
let filter = EnvFilter::new(filter);
tracing_subscriber::registry()
.with(
fmt::layer()
.compact()
.with_target(true)
.with_thread_ids(false)
.with_file(false)
.with_line_number(false),
)
.with(filter)
.init();
}
#[cfg(unix)]
pub fn init_test() {
let _ = tracing_subscriber::registry()
.with(fmt::layer().compact().with_target(false).with_test_writer())
.with(EnvFilter::new("warn,evlib=info"))
.try_init();
}
#[cfg(unix)]
pub mod examples {
use tracing_subscriber::prelude::*;
#[cfg(unix)]
pub fn init_production() {
use tracing_subscriber::{fmt, EnvFilter};
let filter =
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("warn,evlib=info"));
tracing_subscriber::registry()
.with(
fmt::layer()
.json()
.with_target(true)
.with_current_span(false)
.with_span_list(false),
)
.with(filter)
.init();
}
#[cfg(unix)]
pub fn init_development() {
use tracing_subscriber::{fmt, EnvFilter};
let filter = EnvFilter::try_from_default_env()
.unwrap_or_else(|_| EnvFilter::new("info,evlib=debug"));
tracing_subscriber::registry()
.with(
fmt::layer()
.pretty()
.with_target(true)
.with_file(true)
.with_line_number(true)
.with_thread_ids(true),
)
.with(filter)
.init();
}
}
pub mod python {
use pyo3::prelude::*;
#[pyfunction]
#[pyo3(name = "init")]
pub fn init_py() -> PyResult<()> {
#[cfg(unix)]
crate::tracing_config::init();
Ok(())
}
#[pyfunction]
#[pyo3(name = "init_debug")]
pub fn init_debug_py() -> PyResult<()> {
#[cfg(unix)]
crate::tracing_config::init_debug();
Ok(())
}
#[pyfunction]
#[pyo3(name = "init_with_filter")]
pub fn init_with_filter_py(filter: &str) -> PyResult<()> {
#[cfg(unix)]
crate::tracing_config::init_with_filter(filter);
Ok(())
}
#[pyfunction]
#[pyo3(name = "init_production")]
pub fn init_production_py() -> PyResult<()> {
#[cfg(unix)]
crate::tracing_config::examples::init_production();
Ok(())
}
#[pyfunction]
#[pyo3(name = "init_development")]
pub fn init_development_py() -> PyResult<()> {
#[cfg(unix)]
crate::tracing_config::examples::init_development();
Ok(())
}
}
#[cfg(all(test, unix))]
mod tests {
use super::*;
use tracing::{debug, error, info, warn};
#[test]
#[cfg(unix)]
fn test_tracing_initialization() {
init_test();
error!("Test error message");
warn!("Test warning message");
info!("Test info message");
debug!("Test debug message");
}
#[test]
#[cfg(unix)]
fn test_structured_logging() {
init_test();
info!(events = 1000, "Events loaded");
debug!(chunk_size = 512, offset = 1024, "Processing chunk");
warn!(model = "e2vid", "Model fallback activated");
error!(
error = "File not found",
path = "/test/path",
"Failed to load file"
);
}
}