use std::error::Error;
use log::{info, LevelFilter};
#[cfg(all(target_os = "macos", feature = "macos"))]
use oslog::OsLogger;
#[cfg(all(target_os = "linux", feature = "journald"))]
use systemd::journal;
#[cfg(all(target_os = "linux", feature = "journald"))]
pub(crate) fn log_journald(debug: bool) -> Result<(), Box<dyn Error>> {
if let Ok(()) = journal::JournalLog::init() {
if debug {
log::set_max_level(LevelFilter::Debug);
info!("Starting Debug logs");
} else {
log::set_max_level(LevelFilter::Info);
info!("Starting logs");
}
} else {
return Err(From::from("Error can't initialize logging with journald"));
}
Ok(())
}
#[cfg(all(target_os = "macos", feature = "macos"))]
pub(crate) fn log_oslog(debug: bool) -> Result<(), Box<dyn Error>> {
if debug {
OsLogger::new("com.github.rudo")
.level_filter(LevelFilter::Debug)
.category_level_filter("Settings", LevelFilter::Debug)
.init()?;
info!("Starting Debug logs");
} else {
OsLogger::new("com.github.rudo")
.level_filter(LevelFilter::Info)
.category_level_filter("Settings", LevelFilter::Info)
.init()?;
info!("Starting logs");
}
Ok(())
}
#[cfg(test)]
mod tests {
#[cfg(all(target_os = "linux", feature = "journald"))]
use super::log_journald;
#[cfg(all(target_os = "macos", feature = "macos"))]
use super::log_oslog;
use super::Error;
#[cfg(all(target_os = "linux", feature = "journald"))]
#[test]
fn test_journald() -> Result<(), Box<dyn Error>> {
log_journald(false)
}
#[cfg(all(target_os = "macos", feature = "macos"))]
#[test]
fn test_oslog() -> Result<(), Box<dyn Error>> {
log_oslog(false)
}
}