使用 syslog-ng 记录日志时,是否有理由使用 /dev/lognull 而不是 /dev/null?

使用 syslog-ng 记录日志时,是否有理由使用 /dev/lognull 而不是 /dev/null?

最近,我在办公室里大声向所有人询问:“为什么不将这些日志重定向到 /dev/null 而不是 /dev/lognull?”有人告诉我,这其中有(或曾经有)原因,但没人记得。有人告诉我,原因在 syslog-ng 文档的某个地方,但到目前为止我还没能找到它。有人知道原因吗?

答案1

我刚刚收到老板发来的电子邮件:

出色地,我们将其命名为 lognull,但这只是我们的选择。我再次找到了原因。Syslog-ng 想要更改它用于记录的文件的权限,包括 /dev/null。系统中的许多其他东西(包括未以 root 身份运行的东西)都依赖于 /dev/null 的可读和可写性。这就是为什么你应该使用单独的设备文件:

odin ~ # ls -ld /dev/null crw------- 1 root root 1, 3 9月 30 15:48 /dev/null

也许最简单的方法是让 syslog-ng 的 init 脚本创建类似 /dev/lognull 的东西,这样它就始终可用于系统。我认为问题在于,由于现在设备的动态特性,它在重启后会消失。当我们在旧版本的 Linux 或 Solaris 上运行所有这些时,情况并非如此。这有意义吗?

我还发现了这个帖子在 syslog-ng 列表中关于这个问题。到目前为止,我已经遵循了关于空目的地的建议。

答案2

我从未听说过 /dev/lognull。

这将返回什么?

ls -l /dev/null /dev/lognull

我认为 syslog-ng 可能正在创建该设备节点,但是,这看起来很奇怪。

我必须承认,如果 /dev/lognull 是一个大型常规文件,我会发现它非常有趣。:)

答案3

只需定义一个有源但没有目标的日志语句: https://www.syslog-ng.com/technical-documents/doc/syslog-ng-open-source-edition/3.21/administration-guide/55#TOPIC-1180579

要跳过消息处理而不将其发送到目的地,请使用适当的过滤器创建日志语句,但不要在语句中包含任何目的地,并使用最终标志。

相关内容