2个版本

使用旧的Rust 2015

0.1.1 2018年9月12日
0.1.0 2018年9月3日

#750 in 调试


用于 slog-syslog5424

MIT 许可证

33KB
505

syslog5424 - 基于特质的syslog 5424消息格式化

该crate提供了一种将数据格式化为RFC5424(或RFC5425)消息并写入任何实现了Write的类型的方法。任何实现了Rfc5424Data特质的数据类型都可以被格式化。

文档

https://docs.rs/syslog5424

slog 实现

该crate最初被创建为让slog格式化其日志消息为rfc 5424的方式。

实现细节在这里:https://github.com/nocduro/slog-syslog5424

示例

此示例展示了Rfc5424Data特质的简化实现。

#[derive(Debug)]
pub struct Rfc5424Message<'a> {
    pub severity: Severity,
    pub structured_data: Option<StructuredData<'a>>,
    pub message: Option<Message>,
}

impl<'a> Rfc5424Data for Rfc5424Message<'a> {
    fn severity(&self) -> Severity {
        self.severity
    }

    fn timestamp(&self) -> Option<String> {
        None
    }

    fn structured_data(&self) -> Option<StructuredData> {
        self.structured_data.clone()
    }

    fn message(&self) -> Option<Message> {
        self.message.clone()
    }
}

fn main() {
    // create the formatter struct
    let formatter = Rfc5424Builder::new("enterprise_id", Facility::User)
        .hostname("api_server_1").unwrap()
        .app_name("api").unwrap()
        .build();
    
    // create a message to be formatted
    let mut hmap: StructuredData = HashMap::new();
    hmap.insert(
        "custom",
        vec![
            ("id".into(), "54".into()),
            ("progress".into(), "complete".into()),
        ],
    );

    let msg = Rfc5424Message {
        severity: Severity::Error,
        structured_data: Some(hmap),
        message: Some(Message::Text("sample message. Hello there!".into())),
    };

    // run the formatter
    let mut out = Vec::new();
    formatter.format(&mut out, msg).unwrap();
    println!("log: {}", String::from_utf8(out).unwrap());
}

操作系统支持

应在任何提供std的系统上工作,具体的操作系统特性由用户在选择使用哪个Writer时引入。

许可证

MIT(见LICENSE)

无运行时依赖