
我試圖讓 bash 腳本在 Centos 版本 6.5 上使用 syslog 記錄到自訂日誌文件,但它總是只是記錄如下/var/log/messages
:
Jan 12 09:54:47 localhost nbsp: Test message blah!
我究竟做錯了什麼?為什麼它沒有登入/var/log/my_prog_test.log
?這是我的配置和文件。
/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 在設定變更後重新啟動。
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
答案1
您的腳本正在呼叫 logger(1) 向系統日誌寫入內容。因此,rsyslog 將看到程式名稱「logger」進行寫入,而不是「my_prog_test」。
對於您想要實現的目標,請使用“-p local0.notice”呼叫 logger(1) 並在 rsyslog.conf 中按設施“local0”而不是程式名稱“my_prog_test”進行過濾。
根據我的系統上的 rsyslog 文件(Debian Wheezy with rsyslog 7.4.4 from backports),後者將表示為:
if $syslogfacility-text == 'local0' then {
action(type="omfile" file="/var/log/my_prog_test.log")
}
這也應該有效,並且對於這種情況會更簡單:
local0.* /var/log/my_prog_test.log
如果您的系統上的 syslog 工具 local0 已用於此類目的,則您可以使用 local1 到 local7。