#dbus #zbus #systemd #log #logging

logcontrol-zbus

zbus-based DBus frontend for the logcontrol interface

5 stable releases

3.0.1 Feb 3, 2025
3.0.0 Nov 1, 2024
2.0.0 Feb 13, 2024
1.1.0 Sep 30, 2023
1.0.0 Sep 30, 2023

#550 in Debugging

Download history 1/week @ 2024-10-23 141/week @ 2024-10-30 12/week @ 2024-11-06 3/week @ 2024-11-13 7/week @ 2024-11-20 11/week @ 2024-12-04 29/week @ 2024-12-11 1/week @ 2024-12-25 2/week @ 2025-01-08 16/week @ 2025-01-15 45/week @ 2025-01-22 154/week @ 2025-01-29 94/week @ 2025-02-05

310 downloads per month

MIT/Apache

32KB
257 lines

logcontrol-zbus

Crates.io docs.rs

zbus DBus frontend for the logcontrol interface.

Usage

$ cargo add logcontrol-zbus
use logcontrol_zbus::ConnectionBuilderExt;

#[async_std::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Use an implementation such as logcontrol-tracing
    let control = create_log_control();
    let _conn = zbus::ConnectionBuilder::session()?
        .name("de.swsnr.logcontrol.SimpleServerExample")?
        .serve_log_control(logcontrol_zbus::LogControl1::new(control))?
        .build()
        .await?;

    // Do other things or go to wait forever
    std::future::pending::<()>().await;

    Ok(())
}

lib.rs:

A logcontrol::LogControl1 frontend with zbus.

LogControl1 provides the D-Bus interface implementation. It receives the underlying logcontrol::LogControl1 as sole argument and exposes it over D-Bus, as a standard zbus D-Bus interface:

use logcontrol_zbus::{LogControl1, ConnectionBuilderExt};

#[async_std::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let control = create_log_control();
    let _conn = zbus::ConnectionBuilder::session()?
        .name("de.swsnr.logcontrol.SimpleServerExample")?
        .serve_log_control(LogControl1::new(control))?
        .build()
        .await?;

    // Do other things or go to wait forever
    std::future::pending::<()>().await;

    Ok(())
}

Note that for systemctl to find the log control interface with systemctl service-log-level and systemctl service-log-target you need to make sure that

  • the interface is registered under logcontrol::DBUS_OBJ_PATH, and
  • the unit file provides the claimed bus name in the BusName attribute.

Otherwise systemd will not be able to change the log level or target.

Dependencies

~8–17MB
~272K SLoC