#syslog #logging #log-level #log #nix #logger

log4rs-syslog

基于 libc 的 syslog() 函数的 log4rs 系统日志后端 (*nix 系统)

10 个稳定版本

使用 Rust 2015 版本

3.0.3 2018年5月7日
3.0.2 2018年4月20日
3.0.1 2018年1月15日
3.0.0 2017年12月28日
1.0.3 2017年7月10日

#471 in Unix APIs

Download history • Rust 包仓库 85/week @ 2024-04-08 • Rust 包仓库 248/week @ 2024-04-15 • Rust 包仓库 248/week @ 2024-04-22 • Rust 包仓库 214/week @ 2024-04-29 • Rust 包仓库 158/week @ 2024-05-06 • Rust 包仓库 159/week @ 2024-05-13 • Rust 包仓库 141/week @ 2024-05-20 • Rust 包仓库 254/week @ 2024-05-27 • Rust 包仓库 270/week @ 2024-06-03 • Rust 包仓库 185/week @ 2024-06-10 • Rust 包仓库 221/week @ 2024-06-17 • Rust 包仓库 103/week @ 2024-06-24 • Rust 包仓库 154/week @ 2024-07-01 • Rust 包仓库 186/week @ 2024-07-08 • Rust 包仓库 355/week @ 2024-07-15 • Rust 包仓库 401/week @ 2024-07-22 • Rust 包仓库

1,099 monthly downloads
用于 2 crates

MIT/Apache

24KB
407 代码行

Build Status crates.io MIT/Apache 2.0 POSIX-only build tooling

log4rs-syslog

log4rs-syslog - 基于 libc 的 syslog() 函数的非常简单的 log4rs 系统日志后端。仅支持 *nix 系统。

在 docs.rs 上的文档

特性

  • 带有或没有使用身份字符串、日志选项和设施调用 openlog() 的日志记录。
  • 自定义 rust 的 log 包日志级别与 syslog 的日志级别之间的映射。

限制

  • 当有多个系统日志后端时,使用最后构建的后端的 openlog() 配置。
  • 在调用 log4rs_syslog::SyslogAppenderBuilder::build() 时应用 openlog() 配置,而不是在 log4rs::init_config() 或 log4rs::Handle::set_config() 上。

在使用 libc 的接口时,没有适当的办法来解决这个问题。

重大变更

2.0 → 3.0

  • 升级到 log 0.4 和 log4rs 0.8。

1.0 → 2.0

  • log4rs_syslog::register_deserializer() 更名为 log4rs_syslog::register()
  • 可序列化配置文件中的 kindsyslog 更改为 libc-syslog
  • 日志选项常量从 log4rs_syslog::LOG_* 更改为 log4rs_syslog::LogOption::LOG_*,由于 bitflags 包的更改。

使用方法

将此添加到您的 Cargo.toml 文件中

[dependencies]
log4rs-syslog = "3.0"

基于配置文件的初始化

示例配置文件

appenders:
  syslog:
    kind: libc-syslog
    openlog:
      ident: log4rs-syslog-example
      option: LOG_PID | LOG_NDELAY | LOG_CONS
      facility: Daemon
    encoder:
      pattern: "{M} - {m}"
root:
  level: trace
  appenders:
    - syslog

示例代码

#[macro_use]
extern crate log;
extern crate log4rs;
extern crate log4rs_syslog;

fn main() {
    let mut deserializers = log4rs::file::Deserializers::new();
    log4rs_syslog::register(&mut deserializers);

    // Note that configuration file should have right extension, otherwise log4rs will fail to
    // recognize format.
    log4rs::init_file("test.yaml", deserializers).unwrap();

    trace!("Example trace message");
    debug!("Example debug message");
    info!("Example information message");
    warn!("Example warning message");
    error!("Example error message");

    println!("Check your logs for new messages");
}

手动初始化

示例代码

#[macro_use]
extern crate log;
extern crate log4rs;
extern crate log4rs_syslog;

fn main() {
    // Use custom PatternEncoder to avoid duplicate timestamps in logs.
    let encoder = Box::new(log4rs::encode::pattern::PatternEncoder::new("{M} - {m}"));

    let appender = Box::new(
        log4rs_syslog::SyslogAppender::builder()
            .encoder(encoder)
            .openlog(
                "log4rs-syslog-example",
                log4rs_syslog::LogOption::LOG_PID,
                log4rs_syslog::Facility::Daemon,
            )
            .build(),
    );

    let config = log4rs::config::Config::builder()
        .appender(log4rs::config::Appender::builder().build(
            "syslog",
            appender,
        ))
        .build(log4rs::config::Root::builder().appender("syslog").build(
            log::LevelFilter::Trace,
        ))
        .unwrap();
    log4rs::init_config(config).unwrap();

    trace!("Example trace message");
    debug!("Example debug message");
    info!("Example information message");
    warn!("Example warning message");
    error!("Example error message");

    println!("Check your logs for new messages");
}

运行示例

git clone --branch b3.0.0 https://github.com/im-0/log4rs-syslog
cd log4rs-syslog
cargo run --example manually
cargo run --example from_conf

依赖关系

~1.5–2.2MB
~36K SLoC