- 記事一覧 >
- ブログ記事
FreeBSDのman syslog.confの内容をほぼ全部やってみた(意外な事実あり)
はじめに
FreeBSDのsyslog.confのマニュアルを読んで、書いてあることほとんど全て試してみました。
マニュアルに書いてあることと実際の挙動が違っているところがいくつかあり、意外でした。記事中★で検索して見つかるところがその部分です。
今回、やったこと、結果という形で列挙していきたいと思います。
検証対象の英語マニュアルは、こちらです。日本語マニュアルは、こちらです。
2021年10月の時点のFreeBSD13のマニュアルを読んでFreeBSD13のsyslogdを使った結果です。もしかしたら、解釈の違いで、勘違いが有るかもしれません。
【検証環境】
FreeBSD13(本ブログ別記事「FreeBSD-13.0-RELEASEにapache2,php,postgresql,openldapをインストール」まで実施したサーバーです。)
テスト方法
「Linux:syslog転送テスト」←ほとんどの場面で、こちらのPerlスクリプト(send-syslog-test.pl
)を実行してテストしました。
vi send-syslog-test.pl
chmod 755 send-syslog-test.pl
./send-syslog-test.pl 192.168.0.1 local0 warning test
・第一引数
syslog転送先ホスト/IPアドレス
・第二引数
ファシリティ(local0~local7)
・第三引数
プライオリティ(error、warning、debug、info等)
・第四引数
ログメッセージ(自由文)
facility判定
auth, authpriv, console, cron, daemon, ftp, kern, lpr, mail, mark, news, ntp, security, syslog, user, uucp と local0 から local7 全facilityを設定してみました。
特記事項が無いfacilityの記載は省略します。
■facility=auth, priority=emerg./send-syslog-test.pl 192.168.0.xxx auth emerg Message
でメッセージを送信したという意味です。以降、この説明は省略します。
【設定】
auth.=emerg /var/log/auth.log
security.=emerg /var/log/security.log
【結果】
/var/log/auth.log に
Oct 5 22:41:34 192.168.14.19 send-syslog-test[3246074]: Message
以降、同じような出力のため、ログ出力内容の方は省略します。
■facility=console, priority=emerg
facility=console で送信していますが、facility=user として判定されました。
【設定】
console.=emerg /var/log/console.log
user.=emerg /var/log/user.log
【結果】
/var/log/user.log
■facility=mark, priority=alert
facility=markは、後述の「特別な facility である mark」の仕様を想定したもので、本来の使い方ではありません。
facility=mark で送信していますが、facility=user として判定されログ出力されました。priorityも、送信で指定しているのとは違うレベルで判定されました。
【設定】
mark.=alert /var/log/mark.log
user.=emerg /var/log/user.log
kern.=emerg /var/log/kern.log
【結果】
/var/log/user.log
※priority=alertで送信したのですが、user.=emergが有効になりました。
■facility=ntp, priority=emerg
facility=ntp で送信していますが、facility=daemon として判定されました。
【設定】
ntp.=emerg /var/log/ntp.log
daemon.=emerg /var/log/daemon.log
【結果】
/var/log/daemon.log
■facility=security, priority=emerg
facility=security で送信していますが、facility=auth として判定されました。
【設定】
security.=emerg /var/log/security.log
auth.=emerg /var/log/auth.log
【結果】
/var/log/auth.log
特別な facility である mark
マニュアルで「特別な facility ``mark''」と説明されているfacilityです。
20 分ごとに優先度 info でメッセージ -- MARK --
を受信します。
アスタリスクを含んでいる facility フィールドによって有効にされません。
以下の設定で受信できます。
mark.info /var/log/mark.log
以下の設定では mark.log は出力されません。
*.info /var/log/mark.log
vi /etc/rc.conf
syslogd_flags="-m 1"
/etc/rc.d/syslogd restart
とすると、-- MARK --
が1分毎に送信されるようになります。
priority level判定
emerg, crit, alert, err, warning, notice, info, debug 全priorityを設定してみました。
マニュアルでは、「優先度レベル」「level」と表記されていますが、本記事中は、「priority」で統一します。
priorityは、設定されたpriority以上のメッセージが送信されてきたものが有効になります。
左から高→低になります。
例えば、
local0.warning /var/log/warning.log
で、以下の場合、ログ出力されます。
./send-syslog-test.pl 192.168.0.1 local0 emerg test
./send-syslog-test.pl 192.168.0.1 local0 alert test
./send-syslog-test.pl 192.168.0.1 local0 crit test
./send-syslog-test.pl 192.168.0.1 local0 err test
./send-syslog-test.pl 192.168.0.1 local0 warning test
以下の場合、ログ出力されません。
./send-syslog-test.pl 192.168.0.1 local0 notice test
./send-syslog-test.pl 192.168.0.1 local0 info test
./send-syslog-test.pl 192.168.0.1 local0 debug test
★全priorityで特に不可解な挙動は有りませんでしたが、マニュアルと記述が異なる動作をしました。
(日本語マニュアルの記述)
level は、メッセージの重要度を表現し、次の順序付けされたリストからのキーワードです (高から低い): emerg, crit, alert, err, warning, notice, info と debug。
(英語マニュアルの記述)
The level describes the severity of the message, and is a keyword from the following ordered list (higher to lower): emerg, crit, alert, err, warning, notice, info and debug.
とありますが、 実際には、crit, alertの順序が逆で、emerg, alert, crit, err, warning, notice, info と debugでした。
include
include /etc/syslog.d
で、/etc/syslog.d/*.confを読み取ります。
【設定】
・syslog.conf
include /etc/syslog.d
・/etc/syslog.d/ftp.conf
ftp.info /var/log/xferlog
【結果】
facility=ftp, priority=infor→/var/log/xferlog出力
facility=ftp, priority=warning→/var/log/xferlog出力
facility=ftp, priority=debug→出力無し
スペース/タブ区切り
区切り文字は、半角スペース、タブ文字が使えます。(特に問題無かったため、詳細は割愛します。)
(日本語マニュアルの記述)
利用者がセパレータとして空白を使用するなら、利用者の syslog.conf は、他のUnices または Unix に似たシステムと互換性がないことに注意してください。この機能は、あり得る誤りを避けるために、(例えば、syslog.conf にカット & ペーストすることが可能である) 設定の容易さのために追加されました。しかしながら、この変更は、syslog.conf の古いスタイル (すなわち、タブ文字のみ)と後方互換性を保持しています。
(英語マニュアルの記述)
Note that if you use spaces as separators, your syslog.conf might be incompatible with other Unices or Unix-like systems. This functionalitywas added for ease of configuration (e.g., it is possible to cut-and-paste into syslog.conf), and to avoid possible mistakes. This changehowever preserves backwards compatibility with the old style ofsyslog.conf (i.e., tab characters only).
大文字小文字(区別なし)
facilityとpriorityは、大文字小文字に区別は有りません。
【設定】
MAIL.InFo /var/log/mail.log
【結果】
facility=mail, priority=info→/var/log/mail.log出力
facility=mail, priority=warning→/var/log/mail.log出力
facility=mail, priority=debug→出力無し
比較フラグ イコール =
priorityの前にイコール = 記号は、そのpriorityのみ有効の意味です。
【設定】
local0.=warning /var/log/warning.log
【結果】
facility=local0, priority=warning→/var/log/warning.log出力
facility=local0, priority=crit→出力無し
facility=local0, priority=emerg→出力無し
比較フラグ > < => >= !
おのおの以下の意味になります。local0.>warning
: warningより高いpriority(warning含まず)local0.<warning
: warning未満のprioritylocal0.=>warning
: warning以上のprioritylocal0.>=warning
: warning以下のprioritylocal0.!warning
: local0.<warning
と同じ意味です。すなわち、warning未満になります。
基本的には以上ですが、以下の左側の場合も特にエラーにならず、右側の結果になりました。
local0.!=warning
: warning以外のprioritylocal0.!>warning
: warning以下のprioritylocal0.!<warning
: warning以上のprioritylocal0.!=>warning
: warning未満のprioritylocal0.!>=warning
: warning未満のprioritylocal0.!=<warning
: warningより高いpriority(warning含まず)local0.!<=warning
: warningより高いpriority(warning含まず)
program 指定
#!プログラム名
または、
!プログラム名
の行を入れることによって、送信元プログラム毎に設定を変えることができます。
send-syslog-test.pl
は、中にmy $ident = "send-syslog-test";
とあり、プログラム名=send-syslog-test
と書いてあります。
!send-syslog-test
local0.* /var/log/local0.log
local1.* /var/log/local1.log
とある場合、send-syslog-test.pl
から受け取ったfacility=local0、facility=local1がログに記録されます。
他のプログラムでは、facility=local0、facility=local1は反応しません。(上記設定のみの場合)
!send-syslog-test
*.* /var/log/send-syslog-test.log
!ppp
*.* /var/log/ppp.log
とある場合、send-syslog-test.pl
から受け取ったら、/var/log/send-syslog-test.logへppp
から受け取ったら、/var/log/ppp.logへ出力します。
他のプログラムでは反応しません。(上記設定のみの場合)
#!-プログラム名
または、
!-プログラム名
は、該当プログラム名以外全てのプログラムを指します。
!-xxx
*.* /var/log/xxx.log
!-ppp
*.* /var/log/ppp.log
とある場合、send-syslog-test.pl
から受け取ったら、両方とも当てはまるため、/var/log/xxx.logと/var/log/ppp.logに出力します。ppp
から受け取ったら、/var/log/xxx.logのみへ出力します。
!prog1,prog2
(日本語マニュアルの記述)
`!prog1,prog2' は、いずれかのプログラムからのメッセージと一致し、
(英語マニュアルの記述)
Multiple programs may be listed, separated by commas: `!prog1,prog2' matches messages from either program,
メッセージ送信元のプログラム名が prog1 あるいは、 prog2 の場合、有効になる指定と理解しました。
★,以降のプログラム名にハイフンがあると誤作動するようです。
【設定】
!prog1,prog2
*.* /var/log/prog1-2.log
【結果】
プログラム名=prog1から送信→/var/log/prog1-2.log出力
プログラム名=prog2から送信→/var/log/prog1-2.log出力
プログラム名=prog3から送信→出力無し
ハイフンがあると誤作動
↓
【設定】
!send-syslog-test,send-syslog-test2
*.* /var/log/send-syslog-test.log
【結果】
プログラム名=send-syslog-testから送信→/var/log/send-syslog-test.log出力
プログラム名=send-syslog-test2から送信→出力無し※,send-syslog-test2が有効にならない。
プログラム名=send-syslog-test3から送信→出力無し
!-prog1,prog2
(日本語マニュアルの記述)
`!-prog1,prog2' は、すべてのメッセージと一致しますが、`prog1' または`prog2' からのそれらと一致します。
(英語マニュアルの記述)
`!-prog1,prog2' matches all messages but those from `prog1' or `prog2'
正直日本語訳の方は分かりにくいですが、英語(原文)の方から、メッセージ送信元のプログラム名が prog1、prog2 以外の場合、有効になる指定と理解しました。
★,以降のプログラム名にハイフンがあると誤作動するようです。
【設定】
!-prog1,prog2
*.* /var/log/exept_prog1-2.log
【結果】
プログラム名=prog1から送信→出力無し
プログラム名=prog2から送信→出力無し
プログラム名=prog3から送信→/var/log/exept_prog1-2.log出力
ハイフンがあると誤作動
↓
【設定】
!-send-syslog-test,send-syslog-test2
*.* /var/log/send-syslog-test.log
【結果】
プログラム名=send-syslog-testから送信→出力無し
プログラム名=send-syslog-test2から送信→/var/log/send-syslog-test.log出力※send-syslog-test2除外が有効にならない。
プログラム名=send-syslog-test3から送信→/var/log/send-syslog-test.log出力
hostname 指定
#+ホスト名
または、
+ホスト名
の行を入れることによって、送信元ホスト名毎に設定を変えることができます。
send-syslog-test.pl
を実行しているサーバーのホスト名がaaa.example.comとします。
※受信側syslogdで、IPアドレスを逆引きしたホスト名がaaa.example.comである必要があります。逆引きできない場合は、IPアドレスがホスト名になります。
+aaa.example.com
local0.* /var/log/local0.log
local1.* /var/log/local1.log
とある場合、aaa.example.comから受け取ったfacility=local0、facility=local1がログに記録されます。
他のホストからの送信では、facility=local0、facility=local1は反応しません。(上記設定のみの場合)
+aaa.example.com
*.* /var/log/aaa.log
+bbb.example.com
*.* /var/log/bbb.log
とある場合、aaa.example.comから受け取ったら、/var/log/aaa.logへ
bbb.example.comから受け取ったら、/var/log/bbb.logへ出力します。
他のホストからの送信では、反応しません。(上記設定のみの場合)
#-ホスト名
または、
-ホスト名
は、該当ホスト名以外全てのホストからの送信を指します。
-aaa.example.com
*.* /var/log/xxx.log
-bbb.example.com
*.* /var/log/yyy.log
とある場合、ccc.example.com
から受け取ったら、両方とも当てはまるため、/var/log/xxx.logと/var/log/yyy.logに出力します。
bbb.example.comから受け取ったら、/var/log/xxx.logのみへ出力します。
#+@ or +@
(日本語マニュアルの記述)
ホスト名が `@' として与えられるなら、ローカルなホスト名が、使用されます。
(英語マニュアルの記述)
If the hostname is given as `@', the local hostname will be used.
#+@
または、
+@
でメッセージ送信元のホスト名が自分自身のホスト名と一致する場合、有効になる指定と理解しました。(自ホストから自ホストへ送信したメッセージ)
自ホスト名がIPアドレスから逆引きできないと、有効になりませんでした。
【設定】
+@
*.* /var/log/localhostname.log
【結果】
自ホストから送信→/var/log/localhostname.log出力
他ホストから送信→出力無し
+hostname1,hostname2
(日本語マニュアルの記述)
プログラムの指定に関して、複数のコンマで区切られた値は、ホスト名の指定のために指定されます。
(英語マニュアルの記述)
As for program specifications, multiple comma-separated values may be specified for hostname specifications.
プログラム名カンマ区切りと同じように、+hostname1,hostname2
とカンマ区切りにすると、メッセージ送信元のホスト名が hostname1 あるいは、 hostname2 の場合、有効になる指定と理解しました。
【設定】
+hostname1,hostname2
*.* /var/log/hostname1-2.log
【結果】
ホスト名=hostname1から送信→/var/log/hostname1-2.log出力
ホスト名=hostname2から送信→/var/log/hostname1-2.log出力
ホスト名=hostname3から送信→出力無し
-hostname1,hostname2
プログラム名カンマ区切りと同じように、-hostname1,hostname2
とカンマ区切りにすると、hostname1、hostname2 以外のホスト名の場合、有効になりました。
【設定】
-hostname1,hostname2
*.* /var/log/exept_hostname1-2.log
【結果】
ホスト名=hostname1から送信→出力無し
ホスト名=hostname2から送信→出力無し
ホスト名=hostname3から送信→/var/log/exept_hostname1-2.log出力
プロパティベースのフィルタ
プログラム名、ホスト名のマッチの他、カスタマイズされた条件を記述することができます。
先頭に:
または、#:
でプロパティベースのフィルタになります。
■:msg, contains, "Deny"
メッセージに"Deny"が含まれていたら有効になります。
★マニュアルの方は、:msg, contains, ".*Deny.*"
と書かれていて、この場合、"Deny"が含まれていても有効になりませんでした。.*の部分が正規表現の書き方のためです。containsがregexの場合は、有効になりました。
【設定】
:msg, contains, "Deny"
*.* /var/log/msg_contains.log
【結果】
メッセージに"Deny"を含んで送信→/var/log/msg_contains.log出力
メッセージに"Deny"を含まずに送信→出力無し
■:programname, regex, "^bird6$"
プログラム名=bird6で完全一致した場合、有効になります。
★マニュアルの方は、:programname, regex, "^bird6?$"
と書かれていて、この場合、プログラム名=birdやbird6でも有効になりませんでした。?の部分がereregexの書き方のようです。regexがereregexの場合は、有効になりました。
(:programname, ereregex, "^bird6?$"
の場合は、OK)
【設定】
:programname, regex, "^bird6$"
*.* /var/log/programname_regex.log
【結果】
プログラム名=birdで送信→出力無し
プログラム名=bird6で送信→/var/log/programname_regex.log出力
プログラム名=bird7で送信→出力無し
※"bird6"完全一致の意味です。?を書くとマッチしなくなるため、?無しで検証しました。
【設定】
:programname, ereregex, "^bird6?$"
*.* /var/log/programname_regex.log
【結果】
プログラム名=birdで送信→/var/log/programname_regex.log出力
プログラム名=bird6で送信→/var/log/programname_regex.log出力
プログラム名=bird7で送信→出力無し
※ereregexにより、?のマッチが機能しました。?は直前の文字が有っても無くてもマッチの意味です。
■:hostname, icase_ereregex,
ホスト名でマッチを指定するケースです。icase_eregregx
は、大文字小文字区別しない拡張正規表現の意味です。
【設定】
#:hostname, icase_ereregex, "^server-(dcA|podB|cdn)-rack1[0-9]{2}\..*"
*.* /var/log/racks10..19.log
【結果】
ホスト名=server-dcA-rack101.xxx.jpから送信→/var/log/racks10..19.log出力
ホスト名=SERVER-DCA-RACK101.xxx.jpから送信→/var/log/racks10..19.log出力
ホスト名=server-xxx-rack101.xxx.jpから送信→出力無し
フィルタリングリセット
プログラム名、ホスト名、プロパティベースのマッチの行を書いたら、それ以降の facility.priority の設定は、マッチしないと有効になりません。マッチの指定を無効にするようにする設定がフィルタリングリセットです。!*
で、プログラム名マッチ取り消し。+:
で、ホスト名マッチ取り消し。:*
で、プロパティベースのマッチ取り消し。
となります。
(日本語マニュアルの記述)
プログラム, ホスト名またはプロパティベースのフィルタの指定は、引数として`*' を与えることによってリセットされます。
(英語マニュアルの記述)
A program, hostname or property-based filter specification may be reset by giving `*' as an argument.
【設定】
!send-syslog-test
local0.* /var/log/local0.log
local1.* /var/log/local1.log
!*
local0.* /var/log/local.log
local1.* /var/log/local.log
【結果】
プログラム名=send-syslog-testからfacility=local0送信→/var/log/local0.logと/var/log/local.log出力
プログラム名=send-syslog-test2からfacility=local0送信→/var/log/local.log出力
【設定】
+aaa.example.com
local0.* /var/log/local0.log
local1.* /var/log/local1.log
+*
local0.* /var/log/local.log
local1.* /var/log/local.log
【結果】
ホスト名=aaa.example.comからfacility=local0送信→/var/log/local0.logと/var/log/local.log出力
ホスト名=bbb.example.comからfacility=local0送信→/var/log/local.log出力
【設定】
#:hostname, icase_ereregex, "^server-(dcA|podB|cdn)-rack1[0-9]{2}\..*"
local0.* /var/log/racks10..19.log
:*
local0.* /var/log/local.log
【結果】
ホスト名=server-dcA-rack101.xxx.jpからfacility=local0送信→/var/log/racks10..19.logと/var/log/local.log出力
ホスト名=server-xxx-rack101.xxx.jpからfacility=local0送信→/var/log/local.log出力
;セミコロン
;セミコロンにより、複数の facility.priority の組を1行で列挙できます。
【設定】
local0.warning;local1.warning /var/log/warning.log
【結果】
facility=local0, priority=warning→/var/log/warning.log出力
facility=local1, priority=warning→/var/log/warning.log出力
facility=local2, priority=warning→出力無し
facilityカンマ区切り
,カンマにより、複数のfacilityを列挙できます。
【設定】
local0,local1.warning /var/log/warning.log
【結果】
facility=local0, priority=warning→/var/log/warning.log出力
facility=local1, priority=warning→/var/log/warning.log出力
facility=local2, priority=warning→出力無し
アスタリスク
*アスタリスクは、facilityにもpriorityにも使えます。
【設定】
*.warning /var/log/warning.log
【結果】
facility=local0, priority=warning→/var/log/warning.log出力
facility=local1, priority=warning→/var/log/warning.log出力
facility=local2, priority=warning→/var/log/warning.log出力
【設定】
local0.* /var/log/local0.log
【結果】
facility=local0, priority=debug→/var/log/local0.log出力
facility=local1, priority=warning→/var/log/local0.log出力
facility=local2, priority=emerge→/var/log/local0.log出力
none
;セミコロンと組み合わせると、priority=noneで特定のfacilityだけ打ち消せます。
【設定】
*.warning;local0.none /var/log/warning.log
【結果】
facility=local0, priority=warning→出力無し
facility=local1, priority=warning→/var/log/warning.log出力
facility=local2, priority=warning→/var/log/warning.log出力
;セミコロン 後優先
;セミコロンにより、複数の facility.priority の組を1行で列挙できますが、後に書いた方が優先順位が高くなります。
【設定】
*.warning;local0.debug;local0.none,local1.none;local1.debug /var/log/p.log
【結果】
facility=local2, priority=warning→/var/log/p.log
facility=local2, priority=debug→出力無し
facility=local1, priority=debug→/var/log/p.log出力
※local1.noneはlocal1.debugの左側にあるため、効きません。
facility=local0, priority=debug→出力無し
※local0.noneの方が右側にあるため、出力無しになります。
Action マイナス記号
一番右側にAction(ログ出力、その他条件にマッチしたときの動作)を定義できますが、マイナス記号を書いた場合、ログの書き込みが高速化されるようです。その代わり、システムがクラッシュしたりしたときにログが失われるようです。
結果、普通にログが書きこまれただけで、ある程度本格的に検証しないと違いが分からないと思いました。
(日本語マニュアルの記述)
カーネルメッセージが即座にディスクに書き込まれることを保証するために、syslog.conf は、カーネルからメッセージを書き込んだ後に、fsync(2)を呼び出します。他のメッセージは、明示的に同期されません。利用者は、すべてのカーネルメッセージの後に、指定されたファイルを同期させることを先行するために、マイナス記号 ``-'' をパス名の前に置きます。利用者は、システムが、直ちに書き込みの試みに続いて破損するなら、情報を失うかもしれないことに注意してください。それにもかかわらず、``-'' オプションを使用することは、特に、カーネルが多くのメッセージをログ記録するなら、性能を改善します。
(英語マニュアルの記述)
To ensure that kernel messages are written to disk promptly,syslog.conf calls fsync(2) after writing messages from the kernel.Other messages are not synced explicitly. You may prefix a pathnamewith the minus sign, "-", to forego syncing the specified file afterevery kernel message. Note that you might lose information if thesystem crashes immediately following a write attempt. Nevertheless,using the "-" option may improve performance, especially if the kernel is logging many messages.
【設定】
local0,local1.* -/var/log/fast.log
Action @で転送 ポート IPv6
Actionに@を書いた場合、外部サーバーに転送できます。
ポートを指定しない場合、UDP 514ポートで転送します。
ポートを指定、IPv6指定もできて、どちらも正常に動作しました。
【転送設定】
*.* @192.168.14.100
【転送設定&ポート指定】
*.* @192.168.14.100:517
※受け側を/usr/sbin/syslogd -db :517
で起動して検証。
【転送設定&IPv6】
*.* @[fe80::20c:29ff:fe08:a4c3%em0]
※fe80::20c:29ff:fe08:a4c3%em0は、受け側のIPv6アドレス。
Action ユーザー名
Actionにユーザー名を書いた場合、そのユーザーのコンソールにログの内容が表示されます。
カンマ区切りで複数のユーザーを指定できます。
*を書くと、全員のコンソールの意味になります。
【ユーザー名】
*.* admin
ユーザーadminのコンソールに表示されます。
【ユーザー名 カンマ区切り】
*.* admin,root
ユーザーadminとrootのコンソールに表示されます。
【ユーザー名 *】
*.* *
全員のコンソールに表示されます。
Action パイプ
Actionにパイプ記号を書いた場合、プログラムを起動できます。
xargsを使って、ログの内容をシェルスクリプトの引数にすることができました。
【設定】
*.* |xargs /home/admin/test.sh
【結果】
/home/admin/test.sh を下記内容とした場合
echo $# > /var/log/test_sh.log
echo "$*" >> /var/log/test_sh.log
/var/log/test_sh.log に
11
Oct 7 23:30:34 192.168.14.19 send-syslog-test[3258832]: message
が出力されました。
#のエスケープ
#は、#以降、コメントアウトの意味ですが、ファイル名に#を書きたいときは、\#
とします。
【設定】
*.* /var/log/test#comment.log
【結果】
/var/log/test出力
【設定】
*.* /var/log/test\#comment.log
【結果】
/var/log/test#comment.log出力
mail.crit,*.err(バグ)
マニュアルに「バグ」と書かれている項目があります。
(日本語マニュアルの記述)
複数のセレクタの効果は、時々直観的ではありません。例えば、``mail.crit,*.err'' は、``crit'' またはより高のレベルではなく、``err'' またはより高いレベルで ``mail'' facility メッセージを選択します。
(英語マニュアルの記述)
The effects of multiple selectors are sometimes not intuitive. For example "mail.crit,*.err" will select "mail" facility messages at the level of "err" or higher, not at the level of "crit" or higher.
★ここで、文言をよく見ると、mail.crit,*.err
とfacility.priorityの組がセミコロンではなく、カンマで区切られています。facility.priorityの組がカンマで区切れることは一切言及されていません。mail.crit,*.err
とカンマ区切りの動作を確認してみました。
【設定】
mail.crit,*.err /var/log/bug.log
【結果】
facility=mail, priority=crit→/var/log/bug.log出力
facility=mail, priority=err→/var/log/bug.log出力
facility=mail, priority=notice→出力無し
facility=local0, priority=crit→/var/log/bug.log出力
facility=local0, priority=err→/var/log/bug.log出力
facility=local0, priority=notice→出力無し
※マニュアルの文言の通りでした。
【設定】
mail.*,*.crit /var/log/bug.log
【結果】
facility=mail, priority=crit→/var/log/bug.log出力
facility=mail, priority=err→出力無し
facility=mail, priority=notice→出力無し
facility=local0, priority=crit→/var/log/bug.log出力
facility=local0, priority=err→出力無し
facility=local0, priority=notice→出力無し
※カンマの右側*.crit
だけが有効でした。
;セミコロンとカンマが同じ結果になるか試してみました。(後に書いた方が優先順位高)
【設定】
*.warning,local0.debug,local0.none,local1.none,local1.debug /var/log/p.log
【結果】
facility=local2, priority=warning→/var/log/p.log
facility=local2, priority=debug→出力無し
facility=local1, priority=debug→/var/log/p.log出力
※local1.noneはlocal1.debugの左側にあるため、効きません。
facility=local0, priority=debug→出力無し
※local0.noneの方が右側にあるため、出力無しになります。
facility.priorityの組をセミコロンではなく、カンマで区切っても同じ結果でした。
その他、宣伝、誹謗中傷等、当方が不適切と判断した書き込みは、理由の如何を問わず、投稿者に断りなく削除します。
書き込み内容について、一切の責任を負いません。
このコメント機能は、予告無く廃止する可能性があります。ご了承ください。
コメントの削除をご依頼の場合はTwitterのDM等でご連絡ください。