我正在使用 Solaris 10 並在中看到了這一行/etc/syslog.conf
*.err;kern.debug;daemon.notice;mail.crit;auth.debug;local2.notice /var/adm/messages
這是否意味著,如果我有一個授權錯誤/var/adm/message
,由於以下原因,錯誤訊息將出現在我的兩次中:
*.err
auth.debug
如果假設我還有另一行:
*.emerg *
*.err;kern.debug;daemon.notice;mail.crit;auth.debug;local2.notice /var/adm/messages
這是否意味著,如果我有一個內核.emerg,它將記錄兩次,/var/adm/messages
因為
*.emerg * and
kern.debug /var/adm/messages
?
=======
添加於
auth.notice ifdef(`LOGHOST', /var/log/authlog, @loghost)
syslog 如何檢查這台機器是否為日誌主機?透過檢查 /etc/hosts 中的「loghost」別名並查看它是否與機器的 IP 相符?
我的 syslog.conf 沒有 ifdef,但它仍然有效,ifdef 是否必要?
答案1
這些規則主要定義在運行時應用於每個訊息的過濾器,因此實際上,您不應該在同一目標/檔案中存在重複的訊息。
可以使用分號('';'')分隔符號為單一操作指定多個選擇器。請記住,選擇器欄位中的每個選擇器都能夠覆蓋前面的選擇器。
但是,您可以並且確實收到發送到不同文件(包括控制台)的相同訊息。
如果是
*.emerg *
這是 syslog 中所有使用者的簡寫,它適用於所有使用者。
大家都登入了
緊急訊息通常會發送給目前線上的所有用戶,通知他們系統發生了異常情況。若要指定此 wall(1) 功能,請使用星號 (''*'')。
因此,實際上,在 kernel.emerg 中,會將其發送給所有用戶,並同時發送給 /var/adm/messages ;但是 /var/adm/messages 中只有一行。
原始 BSD syslogd 的行為是根據給定的操作記錄指定優先權及更高優先權的所有訊息。
引用自手冊syslog.conf
頁:
至於ifdef,舉個例子:
auth.notice ifdef(`LOGHOST', /var/log/authlog, @loghost)
如果定義了LOGHOST(即此syslog是一個LOGHOST,它將發送日誌/訊息到/var/log/authlog,否則將發送到@loghost。
至於ifdef則不是必需的,至於LOGHOST,根據這一頁它是從檔案 /etc/hosts 中取得的機器名稱(或可能是 DNS,僅測試)
編輯 /etc/hosts (./inet/hosts) 並新增一行或多行定義 loghost 的 IP 位址(名稱是任意的,如果定義了多個遠端主機,您可以使用您想要的任何名稱)