所有系统日志都缺少消息结尾的换行符

所有系统日志都缺少消息结尾的换行符

我们有一个奇怪的问题,所有日志/var/log/在其消息末尾都缺少一个换行符,而是包含一个n,但整个文件只有一行:

Jun  4 10:18:54 host sshd[12468]: Accepted publickey for username from xx.xx.xx.xxx port xxxx ssh2nJun  4 10:18:54 host sshd[12468]: pam_unix(sshd:session): session opened for user username by (uid=0)nJun  4 10:19:25 host sudo: username : TTY=pts/0 ; PWD=/home/username ; USER=root ; COMMAND=/bin/bashn

太奇怪了。我到处找,在互联网上唯一能找到的关于“缺少换行符”的抱怨是指消息本身不是多行的(消息正文中缺少换行符)。但是我找不到任何关于缺少尾随换行符或修改/确认消息格式的信息。

答案1

原因:我们的一位系统管理员修改了 RSyslog 模板,并省略了模板末尾的\the 之前的the。n

RSyslog 配置文件位于,/etc/rsyslog.conf允许指定消息的模板:

# Use default timestamp format
#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template CustomFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
$ActionFileDefaultTemplate CustomFormat

嗯,管理员省略了\换行符,导致:

$template CustomFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%n"

没有骰子。

总而言之,如果您在 RSyslog 处理的任何日志中遇到奇怪的格式问题,请检查 RSyslog 的模板配置,从/etc/rsyslog.conf

相关内容