Rust/Logging
- Base crate is log to provide standard traits for different logging crates
- log4rs allows for logging config file
Tracing
log4rs
* cargo add log * cargo add log4rs
- src/log4.rs {{{#rust
use log::LevelFilter; use log4rs::append::console::{self}; use log4rs::config::{Appender, Config, Logger, Root}; use log4rs::encode::pattern::PatternEncoder; use std::sync::OnceLock;
pub fn init_log() {
static INIT: OnceLock<()> = OnceLock::new(); // initialise only once INIT.get_or_init(|| {
let logfile = log4rs::append::file::FileAppender::builder()
- build("my-log.log")
- unwrap();
let console = console::ConsoleAppender::builder()
encoder(Box::new(PatternEncoder::new(
- "{d} {h({l})} t{t}\n {h({m}{n})}", // Add custom formatting
- build();
- appender(Appender::builder().build("logfile", Box::new(logfile)))
- appender(Appender::builder().build("console", Box::new(console)))
- logger(
- Logger::builder()
- additive(false)
build("my_module", LevelFilter::Debug), // Set to Debug for detailed logs
- Logger::builder()
build(Root::builder().appender("console").build(LevelFilter::Info))
- unwrap();
} }}}