feat: switch logging to systemd journal (v0.4.2)
Replace env_logger + /var/cache/moonlock file logging with systemd-journal-logger. Logs are now reliably accessible via journalctl --user -u moonlock, fixing invisible errors in the systemd user service context. - Cargo.toml: env_logger → systemd-journal-logger 2.2 - main.rs: setup_logging() uses JournalLog - PKGBUILD: add systemd-libs dependency - power.rs: include unstaged systemctl fixes (ABOUTME, --no-ask-password, output())
This commit is contained in:
+5
-16
@@ -120,22 +120,11 @@ fn activate_without_lock(
|
||||
}
|
||||
|
||||
fn setup_logging() {
|
||||
let mut builder = env_logger::Builder::from_default_env();
|
||||
builder.filter_level(log::LevelFilter::Info);
|
||||
|
||||
let log_dir = PathBuf::from("/var/cache/moonlock");
|
||||
if log_dir.is_dir() {
|
||||
let log_file = log_dir.join("moonlock.log");
|
||||
if let Ok(file) = std::fs::OpenOptions::new()
|
||||
.create(true)
|
||||
.append(true)
|
||||
.open(&log_file)
|
||||
{
|
||||
builder.target(env_logger::Target::Pipe(Box::new(file)));
|
||||
}
|
||||
}
|
||||
|
||||
builder.init();
|
||||
systemd_journal_logger::JournalLog::new()
|
||||
.unwrap()
|
||||
.install()
|
||||
.unwrap();
|
||||
log::set_max_level(log::LevelFilter::Info);
|
||||
}
|
||||
|
||||
fn install_panic_hook() {
|
||||
|
||||
+6
-7
@@ -1,4 +1,4 @@
|
||||
// ABOUTME: Power actions — reboot and shutdown via loginctl.
|
||||
// ABOUTME: Power actions — reboot and shutdown via systemctl.
|
||||
// ABOUTME: Wrappers around system commands for the lockscreen UI.
|
||||
|
||||
use std::fmt;
|
||||
@@ -22,11 +22,10 @@ impl fmt::Display for PowerError {
|
||||
impl std::error::Error for PowerError {}
|
||||
|
||||
fn run_command(action: &'static str, program: &str, args: &[&str]) -> Result<(), PowerError> {
|
||||
let child = Command::new(program)
|
||||
let output = Command::new(program)
|
||||
.args(args)
|
||||
.spawn()
|
||||
.map_err(|e| PowerError::CommandFailed { action, message: e.to_string() })?;
|
||||
let output = child.wait_with_output()
|
||||
.stderr(std::process::Stdio::piped())
|
||||
.output()
|
||||
.map_err(|e| PowerError::CommandFailed { action, message: e.to_string() })?;
|
||||
if !output.status.success() {
|
||||
let stderr = String::from_utf8_lossy(&output.stderr);
|
||||
@@ -37,8 +36,8 @@ fn run_command(action: &'static str, program: &str, args: &[&str]) -> Result<(),
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn reboot() -> Result<(), PowerError> { run_command("reboot", "/usr/bin/systemctl", &["reboot"]) }
|
||||
pub fn shutdown() -> Result<(), PowerError> { run_command("shutdown", "/usr/bin/systemctl", &["poweroff"]) }
|
||||
pub fn reboot() -> Result<(), PowerError> { run_command("reboot", "/usr/bin/systemctl", &["--no-ask-password", "reboot"]) }
|
||||
pub fn shutdown() -> Result<(), PowerError> { run_command("shutdown", "/usr/bin/systemctl", &["--no-ask-password", "poweroff"]) }
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
||||
Reference in New Issue
Block a user