#systemd #log #logging #back-end

logcontrol

systemd 日志控制接口的抽象类型

2 个稳定版本

1.0.1 2023 年 9 月 30 日

#585调试

每月 23 次下载
用于 3 crates

MIT/Apache

19KB
136

logcontrol.rs

Crates.io docs.rs

systemd 的 logcontrol 接口的类型和实现。

此接口提供在运行时通过 D-Bus 或使用 systemctl service-log-levelsystemctl service-log-target 改变系统服务的日志行为的方法。

此仓库提供了一组基本类型和此接口的实现

用法

$ cargo add logcontrol-tracing
$ cargo add logcontrol-zbus
use std::error::Error;
use std::time::Duration;

use logcontrol_tracing::{PrettyLogControl1LayerFactory, TracingLogControl1};
use tracing::{event, Level};
use tracing_subscriber::prelude::*;
use tracing_subscriber::Registry;
use zbus::ConnectionBuilder;

#[async_std::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let (control, control_layer) =
        TracingLogControl1::new_auto(PrettyLogControl1LayerFactory, Level::INFO)?;
    let subscriber = Registry::default().with(control_layer);
    tracing::subscriber::set_global_default(subscriber).unwrap();
    let _conn = ConnectionBuilder::session()?
        .name("com.example.Foo")?
        .serve_at(
            logcontrol::DBUS_OBJ_PATH,
            logcontrol_zbus::LogControl1::new(control),
        )?
        .build()
        .await?;

    loop {
        async_std::task::sleep(Duration::from_secs(5)).await;
        event!(Level::INFO, "An message at info level");
        async_std::task::sleep(Duration::from_secs(1)).await;
        event!(Level::WARN, "An message at warning level");
    }
}

有关更完整的示例,请参阅 tracing-server.rs

依赖项

~310–780KB
~18K SLoC