Centos syslog不会从bash脚本logging到自定义文件

我试图让一个bash脚本在Centos 6.5版本上使用sysloglogin到一个自定义的日志文件,但是它总是只logging到/var/log/messages如下所示:

 Jan 12 09:54:47 localhost nbsp: Test message blah! 

我究竟做错了什么? 为什么不logging到/var/log/my_prog_test.log ? 这是我的configuration和文件。

/etc/rsyslog.conf (大部分文件被忽略):

 if $programname == 'my_prog_test' then { action(type="omfile" file="/var/log/my_prog_test.log") } 

在对rsyslog.conf进行更改后,我运行…

 $ sudo /etc/rc.d/init.d/rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ] 

…所以rsyslog在configuration更改后重新启动。

bash脚本/home/nbsp/bin/my_prog_test看起来像这样:

 #!/bin/bash logger 'Test message blah!' 

日志文件列表:

 $ ls -la /var/log/ | grep my_prog_test -rw-------. 1 root root 0 Jan 11 09:23 my_prog_test.log 

符号链接…

 $ ls -la /usr/bin/my_prog_test lrwxrwxrwx. 1 root root 29 Jan 12 08:54 /usr/bin/my_prog_test -> /home/nbsp/bin/my_prog_test 

该程序的列表:

 $ ls -la bin/my_prog_test -rwxrwxr-x. 1 nbsp nbsp 50 Jan 12 09:09 bin/my_prog_test 

您的脚本正在调用logging器(1)将某些内容写入syslog。 因此rsyslog会看到程序名“logger”正在写,而不是“my_prog_test”。

对于你想用“-p local0.notice”实现呼叫logging器(1),在rsyslog.conffilter中使用设备“local0”而不是程序名“my_prog_test”。

根据我的系统上的rsyslog(Debian Wheezy和来自backports的rsyslog 7.4.4)的文档,后者将被表示为:

  if $syslogfacility-text == 'local0' then { action(type="omfile" file="/var/log/my_prog_test.log") } 

这也应该工作,对于这种情况会更简单:

  local0.* /var/log/my_prog_test.log 

如果在你的系统上,系统日志设备local0已经被用于这样的目的,你可以改为使用local1而不是local7。