我无法通过 FreeBSD syslogd 中的程序或工具进行过滤。
我补充道
local6.debug /var/log/test.log
!testd
*.debug /var/log/test.log
到我的/etc/syslog.conf
并重新启动 syslog 守护进程。
然后我编写了一个小型 Go 程序testd
,向 syslogd(工具“用户”)发送一条“调试”消息,然后使用 发送一条附加消息logger -p local6.debug "msg"
。第一条消息仅记录到/var/log/messages
(根据默认规则),但没有记录到/var/log/test.log
,第二条消息根本没有记录。
看起来规则被忽视了?
答案1
看来您的日志消息由于此行而被发送到 /var/log/debug.log:*.=debug /var/log/debug.log
您可以:
- 对测试使用其他优先级(例如,通知而不是调试)
- 更改顺序,以便您的行位于引用 debug.log 的行之前
答案2
您要记录的文件必须存在且具有正确的权限。以 root 身份运行以下命令来创建文件、更新其权限并重新加载 syslog 配置:
touch /var/log/test.log
chmod 600 /var/log/test.log
killall -HUP syslogd
在 FreeBSD 10.3、11.1 和 12.0 上测试。
笔记:感谢在评论中提到这一点的用户 130370。但是,他/她没有回来用此信息更新他们的答案。我觉得这应该作为答案发布,因为它解决了 OP 的问题。