如何测试消息是否已发送到系统日志
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
函数的可验证实现,以便进行单元测试。您根本不必让消息进入已安装的系统日志守护程序(除非您愿意)。
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
函数的可验证实现,以便进行单元测试。您根本不必让消息进入已安装的系统日志守护程序(除非您愿意)。