cosmic-comp/src/logger/mod.rs
Ian Douglas Scott 49e0a5f3f4 Log to journald, and log panics
This integrates a bit better than having `cosmic-session` copy logs from
stderr to journald, and works when not started through `cosmic-session`.

Having panics logged should be helpful if panics ever occur.
2023-01-13 11:50:48 -08:00

34 lines
1.1 KiB
Rust

// SPDX-License-Identifier: GPL-3.0-only
use anyhow::Result;
use slog::Drain;
pub struct LogState {
_guard: slog_scope::GlobalLoggerGuard,
}
pub fn init_logger() -> Result<LogState> {
let decorator = slog_term::TermDecorator::new().stderr().build();
let term_drain = slog_term::CompactFormat::new(decorator)
.build()
.ignore_res();
let journald_drain = slog_journald::JournaldDrain.ignore_res();
let drain = slog::Duplicate::new(term_drain, journald_drain);
// usually we would not want to use a Mutex here, but this is usefull for a prototype,
// to make sure we do not miss any in-flight messages, when we crash.
let logger = slog::Logger::root(std::sync::Mutex::new(drain).fuse(), slog::o!());
let _guard = slog_scope::set_global_logger(logger);
slog_stdlog::init().unwrap();
log_panics::init();
slog_scope::info!("Version: {}", std::env!("CARGO_PKG_VERSION"));
if cfg!(feature = "debug") {
slog_scope::debug!(
"Debug build ({})",
std::option_env!("GIT_HASH").unwrap_or("Unknown")
);
}
Ok(LogState { _guard })
}