[英]syslog: process specific priority
我有两个用户进程A和B。都使用设施LOG_USER
使用syslog
。
我想为他们设置不同的阈值级别:
我发现如果我将/etc/syslog.conf
设置为
user.err /var/log/messages
然后记录错误消息及以上,但来自A和B。
如何为不同的流程设置不同的最低阈值水平?
注意:我正在研究是否有基于配置文件的解决方案。 否则,还有另一种方法可行。 在每个进程中,我们可以使用setlogmask()
安装进程特定的优先级掩码。
编辑(11月18日):我想使用syslog
和一些便携式解决方案。
提供了基于配置文件的解决方案。 我认为CentOS默认带有rsyslog,即使没有,您也可以始终在yum上安装rsyslog。 该解决方案仅适用于rsyslog,而没有其他功能。
不过,这是一个陷阱。 您不能在名称相同的进程之间使用rsyslog(或几乎所有的syslog守护程序实现)分隔日志消息。 相同的可执行路径。 但是,rsyslog确实允许您根据程序名称过滤消息。 这是一个可能的解决方案:大多数程序使用argv [0]调用openlog(3),即。 可执行文件名称,作为第一个参数。 现在,由于您没有透露正在运行的实际程序,因此无法为您确定此程序,但我想您始终可以阅读自己程序的源代码。
在大多数情况下,可执行路径是程序名称,尽管某些守护程序确实用argv [0]摆弄(值得注意的例子是postfix和sendmail)。 另一方面,Rsyslog提供了一种过滤机制,该机制允许用户根据发送程序的名称来过滤消息(您现在可能会看到它们如何与openlog(3)的调用方式联系在一起)。 因此,我们可以尝试对程序名称进行过滤,而不是尝试直接过滤进程。 而且我们可以通过创建符号链接来影响。
因此,此解决方案仅在以下条件下有效:a)您正在运行的进程在开始执行后不会摆弄argv [0]; b)您可以创建到二进制文件的符号链接,从而为同一程序创建两个不同的名称; c)您的程序正在使用argv [0]作为调用的第一个参数来调用openlog(3)。
在这两个条件下,您可以像这样直接在/etc/rsyslog.conf
上过滤消息(示例直接来自rsyslog文档 ):
if $programname == 'prog1' then {
action(type="omfile" file="/var/log/prog1.log")
}
if $programname == 'prog2' then {
action(type="omfile" file="/var/log/prog2.log")
}
例如,如果您的程序名为/usr/bin/foobar
并且创建了符号链接/usr/bin/prog1
和/usr/bin/prog2
都指向/usr/bin/foobar
,则上面的配置文件示例将直接来自进程的消息分别以“ prog1”和“ prog2”开头到不同的日志文件。 此示例将不做任何其他工作,因此所有这些消息仍将进入常规日志文件,除非您明确地将其过滤掉。
本教程http://www.freebsd.org/cgi/man.cgi?query=syslog.conf&sektion=5帮助了我。 以下似乎有效:
# process A: log only error and above
!A
*.err /var/log/messages
# process B: log only critical and above
!B
*.critical /var/log/messages
# all processes other than A and B: log only info and above
!-A,B
*.info /var/log/messages
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.