Crates.io | syslog5424 |
lib.rs | syslog5424 |
version | 0.1.1 |
source | src |
created_at | 2018-09-03 05:45:03.579805 |
updated_at | 2018-09-12 23:44:33.750815 |
description | A trait based RFC5424 syslog formatter |
homepage | https://github.com/nocduro/syslog5424 |
repository | https://github.com/nocduro/syslog5424 |
max_upload_size | |
id | 82702 |
size | 33,216 |
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.
#[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());
}
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)