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

Linux 更改系统日志中的日期格式,linux,date,freebsd,syslog,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

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

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

我所做的是安装了
sysutils/syslog ng
端口,并使用脚本将我的
/etc/syslog.conf
迁移到
/usr/local/etc/syslog ng.conf
(谢天谢地,即使在相当复杂的配置中,它也能正常工作),并将此自定义格式模板添加到所有
文件()
目的地:

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

您可以在中找到更多格式信息。它对我(到目前为止)有好处,希望它能帮助你

最后,我使用一个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

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

编辑系统日志配置文件(在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); }; 致:

目标d_auth{file(“/var/log/auth.log”模板(模板日期格式));};
然后重新启动syslog(
service syslog ng restart
),并尝试登录以查看您的
auth.log

中的更改日期问题始终有一个新选项,只添加几行。
我的解决方案是在
/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...

这在很大程度上取决于您使用的系统日志守护进程。使用此信息编辑问题,您可能会得到更好的回答。
date-d“Dec 5 07:52:10”+%Y%m%d%T“
将为您提供类似于
20131205 07:52:10
的输出。我不知道的是如何在syslog.conf中设置格式。这很有趣,我一定会尝试一下。
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...