syslog5424
- trait based syslog 5424 message formattingThis crate provides a way for data to be formatted as an RFC5424 (or RFC5425) message and written to any type that implements Write
.
Any type that implements the Rfc5424Data
trait can be formatted.
slog
implementationThis crate was originally made as a way to have slog
format its log messages as rfc 5424.
The implementation for that is here: https://github.com/nocduro/slog-syslog5424
This example shows a minimal implementation of the Rfc5424Data
trait.
```rust
pub struct Rfc5424Message<'a> {
pub severity: Severity,
pub structured_data: Option
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("enterpriseid", Facility::User) .hostname("apiserver1").unwrap() .appname("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());
} ```
Should work on any system where std
is available, the OS specifics are introduced by the user when picking which Writer
to use.
MIT (see LICENSE)