更改系统日志中的日期格式

Posted

技术标签:

【中文标题】更改系统日志中的日期格式【英文标题】:Changing date format in syslog 【发布时间】:2013-12-05 14:08:46 【问题描述】:

我们是否可以更改 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

【问题讨论】:

这在很大程度上取决于您使用的系统日志守护程序。使用此信息编辑问题,您可能会得到更好的答复。 date -d"Dec 5 07:52:10" "+%Y%m%d %T" 会给你像20131205 07:52:10 这样的输出。我不知道的是如何在 syslog.conf 中设置格式。 【参考方案1】:

即使你找到了不同的解决方案,我也给别人一个答案。

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

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

模板 template_date_format 模板("$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC $HOST $MSGHDR$MSG\n"); 模板转义(否); ;

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

之后,在这个配置文件中,找到所有你想改变输出格式的文件,然后应用这个模板。

比如我想改/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 中的更改。

【讨论】:

这很有趣,我一定会试试的。【参考方案2】:

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

我所做的是安装 sysutils/syslog-ng 端口,并使用 convert-syslogconf.awk 脚本将我的 /etc/syslog.conf 迁移到 /usr/local/etc/syslog-ng.conf(谢天谢地,即使是相当复杂的config) 并将此自定义格式模板添加到所有file() 目的地:

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

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

【讨论】:

【参考方案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

【讨论】:

【参考方案4】:

日期问题总是有一个新选项,只需添加几行。 我的解决方案是添加一个文件到/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...

【讨论】:

以上是关于更改系统日志中的日期格式的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Git 日志日期格式

linux如何查询指定日期的系统安全日志

Linux系统中的日志管理

linux 分析和排查系统故障

在运行时更改系统日期格式时更新 DatePicker 中的日期格式

Linux系统实用命令总结