signstar_common/
logging.rs1use log::{LevelFilter, Log};
4use simplelog::{ColorChoice, TermLogger, TerminalMode};
5use systemd_journal_logger::{JournalLog, connected_to_journal};
6
7#[derive(Debug, thiserror::Error)]
9pub enum Error {
10 #[error("Journal initialization error: {0}")]
12 Journal(std::io::Error),
13
14 #[error("Logger initialization error: {0}")]
16 Logger(#[from] log::SetLoggerError),
17}
18
19pub fn setup_logging(max_level: impl Into<LevelFilter>) -> Result<(), Error> {
25 if connected_to_journal()
26 && let Ok(log) = JournalLog::new().map(|log| {
27 Box::new(log.with_extra_fields(vec![("VERSION", env!("CARGO_PKG_VERSION"))]))
28 as Box<dyn Log>
29 })
30 {
31 log::set_boxed_logger(log)?;
32 log::set_max_level(max_level.into());
33 return Ok(());
34 }
35 TermLogger::init(
36 max_level.into(),
37 Default::default(),
38 TerminalMode::Stderr,
40 ColorChoice::Auto,
41 )?;
42 Ok(())
43}