我发现 syslog-ng 的一个很好的功能:如果我使用记录器为了记录用户进程中的内容,我获取了记录用户名。左右如此:
peterh$ echo test log message|logger
然后我得到这个/var/log/messages
:
Oct 12 16:38:29 thehost peterh: test log message
其中“thehost”是服务器的主机名,“peterh”是我在下面给出的命令的用户名。
现在我想要的是:我想使用 syslog-ng 将特定用户的日志条目收集到特定文件中。
syslog-ng 用来过滤整个日志条目的功能看起来很糟糕,但有时却不起作用:
# Doesn't work - it doesn't do anything
filter f_peterh { match('peterh'); };
destination d_filter { file("/var/log/peterh.log"); };
log { source(s_src); filter(f_peterh); destination(d_peterh); };
网络上许多地方提供的文档讨论了从日志消息的二进制格式到相关 RFC 的所有内容,除了如何过滤系统日志中的用户名。
怎么做?
答案1
我不知道这是否仍然适合您,但对于其他尝试按用户名进行过滤的人来说,这就是我能够做到的方式的参考。
我创建了以下过滤器。
filter sampleUserFilter {
facility (user) and match ("myUser" value ("PROGRAM"));
};
这允许我将来自特定用户(使用记录器)的消息路由到单独的文件。