#journal #systemd #logging

systemd-journal-logger-memfd-syscall

Systemd journal logger for the log facade (fork supporting older glibc versions)

1 stable release

2.0.1 Oct 20, 2023
2.0.0 Oct 18, 2023

#35 in #journal

Download history 11/week @ 2024-02-22 12/week @ 2024-02-29 17/week @ 2024-03-28 59/week @ 2024-04-04 7/week @ 2024-04-11

83 downloads per month

MIT/Apache

34KB
396 lines

systemd-journal-logger-memfd-syscall

A pure Rust log logger for the systemd journal (fork supporting older glibc versions).

About this fork

This crate is a fork of systemd-journal-logger. The only reason for the existence of this fork is that the maintainer of systemd-journal-logger is not willing to support glibc versions older than 2.27.

The only modification included in this fork is calling the memfd_create syscall (which is available starting with the Linux kernel 3.17) instead of the memfd_create() libc function, which in glibc it is available starting with glibc 2.27, while Rust supports glibc >= 2.17.

This fork will try to merge all the changes done upstream and release versions in the same way as upstream.

Usage

$ cargo add systemd-journal-logger-memfd-syscall

Then initialize the logger at the start of main:

use log::{info, warn, error, LevelFilter};
use systemd_journal_logger_memfd_syscall::JournalLog;

JournalLog::new().unwrap().install().unwrap();
log::set_max_level(LevelFilter::Info);

info!("hello log");
warn!("warning");
error!("oops");

You can also add additional fields to every log message, such as the version of your executable:

use log::{info, warn, error, LevelFilter};
use systemd_journal_logger_memfd_syscall::JournalLog;

JournalLog::new()
    .unwrap()
    .with_extra_fields(vec![("VERSION", env!("CARGO_PKG_VERSION"))])
    .with_syslog_identifier("foo".to_string())
    .install().unwrap();
log::set_max_level(LevelFilter::Info);

info!("this message has an extra VERSION field in the journal");

These extra fields appear in the output of journalctl --output=verbose or in any of the JSON output formats of journalctl.

See systemd_service.rs for a simple example of logging in a systemd service which automatically falls back to a different logger if not started through systemd.

Both loggers use mostly the same fields and priorities as this implementation.

License

Either MIT or Apache 2.0, at your option.

Dependencies

~355KB