我在 Ubuntu 14.04 上使用 rsyslogd 7.4.4。我已经更新了配置文件/etc/rsyslog.d/30-component.conf包含以下内容:
# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
$EscapeControlCharactersOnReceive off
$outchannel network,/var/log/component/network.log,10240000,/usr/home/component/bin/./rotate.sh /var/log/component/network.log
if $programname == 'Network' then :omfile:$network
if $programname == 'Network' then stop
if $programname == 'Network' then /var/log/gwc/network.log
有时我需要删除网络日志手动归档。之后,我总是需要重新启动守护进程。问题是,直到有人写入适当的系统日志通道(在我的例子中为“网络”)后,才会创建新文件。但我想拥有网络日志文件,即使它是空的。
前段时间,我在Ubuntu 10.04上使用了rsyslogd 4.2.0,配置几乎相同。唯一的区别是“~“被替换为”停止“ 和 ”:om文件:” 被引入。在该版本中,一切都很好,并且在守护进程重新启动后创建了新文件。
我想 rsyslogd 4.2.0 的下一行会导致文件新创建:
if $programname == 'Network' then /var/log/gwc/network.log
但7.4.4似乎不起作用。如何使用新版本实现旧版本的行为?
答案1
Rsyslog 5.x+ 不会创建文件(或打开网络连接),直到有与该过滤器匹配的日志条目。
这是与修复删除权限问题相关的早期行为的变化。目前(截至 8.5)没有办法强制创建空文件。
答案2
强制日志轮换通常也使用 logrotate 来完成。例如,像 rhel 这样的发行版在 /etc/logrotate.d/ 中有日志轮换配置。
例如: /etc/logrotate.d/syslog 包含 rsyslogd 文件的规则。在这种情况下,我可以使用以下命令强制日志轮换:
logrotate -f /etc/logrotate.d/syslog
答案3
logrotate -f /etc/logrotate.conf