#![deny(warnings, clippy::all)]
use log::kv::ToValue;
use log::Log;
use systemd_journal_logger::JournalLog;
struct AddThreadId<L: Log>(L);
impl<L: Log> Log for AddThreadId<L> {
fn enabled(&self, metadata: &log::Metadata) -> bool {
self.0.enabled(metadata)
}
fn log(&self, record: &log::Record) {
let thread_id = format!("{:?}", std::thread::current().id());
let extra_fields = &[("THREAD_ID", thread_id.to_value())];
self.0.log(
&record
.to_builder()
.key_values(&[record.key_values(), &extra_fields])
.build(),
);
}
fn flush(&self) {
self.0.flush();
}
}
fn main() {
let log = AddThreadId(
JournalLog::new()
.unwrap()
.with_extra_fields(vec![("VERSION", env!("CARGO_PKG_VERSION"))]),
);
log::set_boxed_logger(Box::new(log)).unwrap();
log::set_max_level(log::LevelFilter::Trace);
log::info!(hello = "world"; "A info message");
}