将年份添加到 rsyslogd 生成的条目中

Kaz*_*Kaz 5 rsyslog

rsyslogd的默认配置以传统格式写入日志条目,如下所示:

Nov 30 10:40:01 localhost CRON[30786]: pam_unix(cron:session): session closed for user list
Run Code Online (Sandbox Code Playgroud)

没有年份,这对于处理日志的工具来说很不方便,并且需要每个条目的确切时间戳,因此必须实施猜测年份的黑客。

我们可以将 rsyslogd 切换到一个名为的内置模板RSYSLOG_FileFormat,该模板会更改为高精度时间戳。虽然这是 RFC 时间戳格式适合处理,但它是冗长的胡言乱语,没有人眼难以看到的空白。

2013-11-30T10:50:01.478204-08:00 localhost CRON[31200]: ...
Run Code Online (Sandbox Code Playgroud)

不幸的是,rsyslogd 的模板系统非常不友好,文档也很差。令人难以置信的是,对于这个模板系统中所有不必要的复杂性, 的值dateformat显然与选择的硬编码 C 相关联enum

有一些参数,$YEAR但这些只是提取当前时间,而不是从消息时间戳中提取的时间,所以这是一个黑客。

我只想专注于编写处理条目的程序。

我可以放入rsyslogd.conf文件以获得准确输出的正确简介是什么:

Nov 30 2013 10:40:01 localhost CRON[31200]: ...
Run Code Online (Sandbox Code Playgroud)

只是传统的模板,加上年份。

Kaz*_*Kaz 9

好吧,我从它的 git 中取出 rsyslog,从最接近我的系统运行的行创建一个分支并修补它

2013-11-30 13:39:59 localhost sshd[17331]: Accepted publickey for kaz from 192.1...
Run Code Online (Sandbox Code Playgroud)

由于这些rsyslog.conf行,现在生成了上述内容:

$template CustomFormat,"%timegenerated:::date-strftime(%Y-%m-%d %H:%M:%S)% %HOSTNAME% %syslogtag%%msg%0\n"
$ActionFileDefaultTemplate CustomFormat
Run Code Online (Sandbox Code Playgroud)

问题中给出的格式只是%b %d %Y %H:%M:%S.

新事物是date-strftime(...)指定基于strftime格式的日期属性。

这适用于日志消息中的时间(接收时间或生成时间)。

接触到这个代码库后,我现在要去淋浴和泡在浴缸里。

2016 年 2 月更新:

看起来这个话题出现在 2014年的 rsyslogd 邮件列表中,并引用了这个 Unix Stackexchange 问题(原发帖者抱怨date-strftime在他使用的 rsyslogd 版本中不起作用。不开玩笑!)

这导致了问题 65,它完全忽略了strftime基于我的补丁的存在,并采用了一种笨拙的方法,对星期几、小时、年份等进行自定义替换项目。例如,要获得年份,您必须使用%timestamp:::date-year%. %timestamp:::xxx必须为日期的每个元素重复这种冗长的内容!

于是%timestamp:::date-strftime(%Y-%m-%d %H:%M:%S)变成:

%timestamp:::date-year%-%timestamp:::date-month%-%timestamp:::date-day% %timestamp:::date-hour%:%timestamp:::date-minute%:%timestamp:::date-second%
Run Code Online (Sandbox Code Playgroud)

好伤心!

  • 为了向想要使用它的其他人澄清,您需要粘贴到 rsyslog.conf 文件中的完整文本是两行。第一行:`$template CustomFormat,"%timegenerated::date-year%-%timegenerated::date-month%-%timegenerated:::date-day% %timegenerated:::date-hour%:%timegenerated :::date-minute%:%timegenerated:::date-second% %HOSTNAME% %syslogtag%%msg%\n"` 第二行:`$ActionFileDefaultTemplate CustomFormat` (3认同)
  • 我爱浴缸句子 (2认同)