#syslog #message #parser #rfc-3164 #rfc-5424 #serialization #complex

nightly syslog_rfc3164

RFC3164 (IETF格式) 系统日志消息的解析器

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2017年12月26日

#7 in #rfc-5424

ISC 许可证

26KB
533 代码行

此模块在 Rust 中实现了一个 RFC 3164 IETF 系统日志协议解析器。代码是 Roguelazer 的更复杂的 5424 解析器的修改版。

Build Status

文档

此工具支持使用 serde 序列化解析的消息。

性能

在一个最近系统的1上,发布构建大约需要 8µs 来解析一个平均消息,大约 300ns 来解析最小合法消息。调试计时略差 - 大约 60µs 用于平均消息,大约 8µs 用于最小消息。一个单线程的系统日志服务器应该能够解析至少 100,000 条消息/s,只要你为解析器运行一个单独的线程。


lib.rs:

RFC 5424 系统日志消息的解析器。不要与旧的 RFC 3164 BSD 系统日志协议混淆,许多系统仍然发出。

特别是,支持结构化数据字段。

通常,您只需使用字符串对象调用(重导出)的 parse_message 函数。

示例

一个简单的系统日志服务器

use syslog_rfc3164::parse_message;
use std::net::UdpSocket;
use std::str;

let s = UdpSocket::bind("127.0.0.1:10514").unwrap();
let mut buf = [0u8; 2048];
loop {
    let (data_read, _) = s.recv_from(&mut buf).unwrap();
    let msg = parse_message(str::from_utf8(&buf[0..data_read]).unwrap()).unwrap();
    println!("{:?} {:?} {:?} {:?}", msg.facility, msg.severity, msg.hostname, msg.msg);
}

未实现的功能

  • 理论上,您可以发送任意(非Unicode)字节作为系统日志消息的消息部分。Rust 没有方便的方式只将缓冲区的一部分视为 utf-8,所以我只是不支持它。大多数“真实”的系统日志服务器都会对此产生不良反应。

依赖关系

~1.3–2.4MB
~48K SLoC