强制 rsyslogd 在有人写入之前创建新文件

强制 rsyslogd 在有人写入之前创建新文件

我在 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

相关内容