syslog_rs/formatters/
syslog_file.rs1use std::borrow::Cow;
2
3use chrono::{Local, SecondsFormat};
4
5use crate::{socket::TapType, truncate, Priority, NEXTLINE, WSPACE};
6
7use super::{SyslogFormatted, SyslogFormatter};
8
9#[derive(Debug, Clone)]
10pub struct FormatFile;
11
12unsafe impl Send for FormatFile {}
13
14impl SyslogFormatter for FormatFile
15{
16 fn vsyslog1_format<'f>(_tap_type: TapType, pri: Priority, progname: &'f str, pid: &'f str, fmt: &'f str) -> SyslogFormatted<'f>
17 {
18 let timedate = Local::now().to_rfc3339_opts(SecondsFormat::Secs, false);
19
20 let msg_payload_final =
21 if fmt.ends_with("\n") == true
22 {
23 truncate(fmt)
24 }
25 else
26 {
27 fmt
28 };
29
30 let msg_pkt =
31 [
32 Cow::Owned(pri.to_string()),
33 Cow::Borrowed(WSPACE), Cow::Owned(timedate),
34 Cow::Borrowed(WSPACE), Cow::Borrowed(progname),
35 Cow::Borrowed(WSPACE), Cow::Borrowed(pid),
36 Cow::Borrowed(WSPACE), Cow::Borrowed(msg_payload_final), Cow::Borrowed(NEXTLINE)
37 ]
38 .to_vec();
39
40 let msg_rng = msg_pkt.len();
41
42 return SyslogFormatted{ msg: msg_pkt, stderr_range: 0..msg_rng };
43 }
44}
45