如何测试消息是否已发送到系统日志

How to test that a message has been sent to syslog

linux 程序正在将日志发送到系统日志。

为了自动测试这个程序,我需要检查在完成某些操作后是否有消息发送到系统日志。

不幸的是,系统日志文件的位置因系统日志配置而异(/var/log/messages 在一台计算机上,/var/log/syslog 在另一台计算机上,可能还有其他路径)。

如何以编程方式知道 syslog 文件的当前路径?

如果我知道日志路径,如何检测日志消息?我可以 grep 日志文件并检查 grep 命令的 return 值但是:

这个测试应该也适用于 syslog 的 busybox 版本。

我相信您可以从 /etc/rsyslog.conf 或 /etc/syslog.conf

中检索位置

关于第二个问题 - 您可以 grep <msg> /var/log/syslog* 在每个日志中查找它,包括轮换。

您可能希望在您的消息中添加一些唯一的 运行 id,以区别于之前内容相同的消息。应该比删除系统日志好办多了。

可能最好的方法是插入一个共享库(使用 LD_PRELOAD),您可以在其中提供自己的 syslog 函数的可验证实现,以便进行单元测试。您根本不必让消息进入已安装的系统日志守护程序(除非您愿意)。