use log::{Level, Log, Metadata};
use crate::system::syslog;
pub struct Syslog;
impl Log for Syslog {
fn enabled(&self, metadata: &Metadata) -> bool {
metadata.level() <= log::max_level() && metadata.level() <= log::STATIC_MAX_LEVEL
}
fn log(&self, record: &log::Record) {
let priority = match record.level() {
Level::Error => libc::LOG_ERR,
Level::Warn => libc::LOG_WARNING,
Level::Info => libc::LOG_INFO,
Level::Debug => libc::LOG_DEBUG,
Level::Trace => libc::LOG_DEBUG,
};
let message = format!("{}", record.args());
syslog(priority, libc::LOG_AUTH, &message);
}
fn flush(&self) {
}
}
#[cfg(test)]
mod tests {
use super::Syslog;
use log::Log;
#[test]
fn can_write_to_syslog() {
let logger = Syslog;
let record = log::Record::builder()
.args(format_args!("Hello World!"))
.level(log::Level::Info)
.build();
logger.log(&record);
}
}