syslog_rs/formatters/
syslog_file.rs

1use 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