更改syslog中的日期格式

时间:2013-12-05 14:08:46

标签: linux date freebsd syslog

我们是否可以更改syslog记录的特定日志文件中的日期格式?我不想改变记录所有日志的方式,只是改变日志文件。

编辑:我正在使用syslogd(在FreeBSD中)

这就是我的文件现在的样子:

Dec  5 07:52:10 Log data 1
Dec  5 07:52:10 Log data 2
Dec  5 07:52:10 Log data 3

这就是我希望它的样子:

20131205 07:52:10 Log data 1
20131205 07:52:10 Log data 2
20131205 07:52:10 Log data 3

我的syslog.conf看起来像这样,其中/var/log/my_log.log是我的日志文件:

+@
*.notice;local0.none;local1.none;local2.none;authpriv.none;kern.debug;mail.crit;news.err        /var/log/messages
security.*                                      /var/log/security
auth.info;authpriv.info                         /var/log/auth.log
mail.info                                       /var/log/maillog
ftp.info                                        /var/log/xferlog
cron.*                                          /var/log/cron
*.=debug                                        /var/log/debug.log
console.info                                    /var/log/console.log

local1.info                                     /var/log/my_log.log

4 个答案:

答案 0 :(得分:7)

即使您找到了不同的解决方案,我也会为其他人提供答案。

编辑您的系统日志配置文件(例如,在Debian上:/etc/syslog-ng/syslog-ng.conf)。

然后声明一个这样的新模板:

template template_date_format {
    template("${YEAR}-${MONTH}-${DAY} ${HOUR}:${MIN}:${SEC} ${HOST} ${MSGHDR}${MSG}\n");
    template_escape(no);
};

这是一个示例,但您可以根据user9645答案中链接的系统日志文档使用不同的宏。

之后,在此配置文件中找到要更改输出格式的所有文件,并将此模板应用于它们。

例如,我想更改/var/log/auth.log输出格式,然后更改:

destination d_auth { file("/var/log/auth.log"); };

到:

destination d_auth { file("/var/log/auth.log" template(template_date_format)); };

然后重新启动系统日志(service syslog-ng restart)并尝试登录以查看auth.log中的更改。

答案 1 :(得分:4)

我使用FreeBSD 9.2和 Zabbix 系统监视器GUI时遇到同样的问题,系统日志上的日期戳(!)中无法处理“Jan”或“Feb”之类的内容消息。

我所做的是安装sysutils/syslog-ng端口,然后使用 convert-syslogconf.awk 脚本将我的/etc/syslog.conf迁移到/usr/local/etc/syslog-ng.conf(值得庆幸的是即使是相当复杂的配置也能很好地工作)并将此自定义格式模板添加到所有file()目的地:

template t_msgfmt {
    template("${ISODATE} ${HOST} ${FACILITY} ${LEVEL} ${MSGHDR}${MSG}\n");
    template_escape(no);
};

您可以在 syslog-ng manual section 11.1 中找到(批量)更多格式信息。它对我有用(到目前为止)希望它对你有所帮助!

答案 2 :(得分:3)

我最终使用awk脚本来运行日志文件并替换日期字段

awk '{getDate="date -j -f \"%b %d %H:%M:%S\" \""$1" "$2" "$3"\" \"+%Y%m%d %H:%M:%S\""
      while ( ( getDate | getline date ) > 0 ) { }
      close(getDate);
      print date,$2,$3,$4,$5}' Temp1 > Temp2

答案 3 :(得分:0)

对于日期问题,总是有一个新选项,仅增加了几行。
我的解决方案是将文件添加到/etc/rsyslog.d/,例如myrsyslog.conf,然后添加您选择的格式,我的格式是:

$template myformat,"%TIMESTAMP:1:10:date-rfc3339% %TIMESTAMP:19:12:date-rfc3339% %syslogtag%%msg%\n"
$ActionFileDefaultTemplate myformat

这会将新格式应用于您的日志,使其易于解析。

之前

Sep  3 12:52:37 whs dhcpcd[477]: wlan0: expired address ...
Sep  3 12:52:37 whs dhcpcd[477]: wlan0: part of Router Advertisement expired
Sep  3 12:52:37 whs dhcpcd[477]: wlan0: deleting route to ...

之后

2020-09-03 13:00:49 systemd[1]: rsyslog.service: Succeeded. 
2020-09-03 13:00:49 systemd[1]: Stopped System Logging Service. 
2020-09-03 13:00:49 systemd[1]: Starting System Logging Service...