基于配置文件的解决方案可用。我认为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 documentation例如)过滤消息:
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/foobar
的符号链接/usr/bin/prog1
和/usr/bin/prog2
,则上述配置文件示例将分别将来自作为“prog1”和“prog2”启动的进程的消息分别指向不同的日志文件。这个例子不会摆弄其他任何东西,因此所有这些消息仍然会转到常规日志文件,除非您明确地将其过滤掉。
提及您正在使用的syslog的哪些实现。答案在某种程度上取决于实现特定的配置文件语法 –
@Sami:我正在使用Linux CentOS。你在找什么信息?我可以运行一些命令或查找某个文件来找出它? – Arun