System Management
キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

シェルのloggerコマンドについて

hajimek
頻繁なアドバイザー

シェルのloggerコマンドについて

現在の現場で、POSIXシェルでツール

プログラムを作成しており、デバッグ

作業を行っております。

そのスクリプトの中で、loggerコマン

ドを使用して、syslogにメッセージを

書き込むようにしているのですが、

単体テストをしてみると、3割弱程度

の割合で、syslogへの書き込みが欠落

する事象が発生します。

欠落するのは毎回ではなく数回に一回

といった感じでログファイルに書き込

まれなかったり、一部分だけしか書き

込まれなかったりと症状も不安定です。

使用方法は下記のとおりです。

logger -p facility.level "message"

facilityとlevelもlocacl3.infoと

user.noticeの両方を試してみました

が、どちらでも上記の事象が発生します。

手元に、syslogへのロギングレベルの

資料が無いため、これ以上は試せていません。

そこで、loggerコマンドに詳しい方が

いらっしゃいましたら、原因や解決方

法をご教授願えませんでしょうか。

また、別の方法で解決する方法があり

ましたら、ご教授願います。

お忙しいところお手数お掛けしますが、宜しくお願い致します。

追加情報ですが、syslogのパーミッシ

ョンは、644でスクリプトは一般ユー

ザで起動します。

5 件の返信
yoshimura
レギュラーアドバイザー

シェルのloggerコマンドについて

syslogd はデフォルトで同じメッセージの連続した書き込みを省略する機能がありますが、それによりログがされていないように見えてませんでしょうか?

"above message repeats X times" というログが該当ログメッセージの直後に見られるようであれば、省略されている可能性があります。

この場合 syslogd の起動オプションに "-r" をつけることで重複メッセージの省略は行なわれなくなります。

hajimek
頻繁なアドバイザー

シェルのloggerコマンドについて

yoshimura様

お世話になります。

貴重な情報ありがとうございます。

現在syslogに書き込ませているメッセージは、

毎回異なるメッセージですので同じメッセージの

重複書き込みには該当しないと思います。

syslogにも"above message repeats X times"の

ようなメッセージは出ておりません。

現場でloggerコマンドを昔使用した際のサンプル

には-tオプションを使用していますが、これの使

い方がよく分かりません。

もしお分かりでしたらご教授願えませんでしょうか。

宜しくお願い致します。
nt
貴重なコントリビューター

シェルのloggerコマンドについて

"message" が長すぎるということはないですか?

古い logger の source を見ると

char buf;

と 120 bytes の auto 変数を message に使っています。

message をここにコピーして syslog() を呼んでいるので

message が長すぎる場合、ここを壊している可能性があります。

また syslog() では %m をスキャンし、そのあと vsprint で他の % を処理

しているのでごみを読んでいるかもしれません。

古い source を見ているので現在は違うかもしれませんが。

yoshimura
レギュラーアドバイザー

シェルのloggerコマンドについて

logger の "-t" は tag の指定です。syslog.log の出力ではホスト名の後の ":" までの出力、一般的なプログラムではプログラム名の表示に当たる箇所の指定です。

"-t" を省略すると logger コマンドを実行した端末ユーザ名が使われます。

ログが抜けるのと "-t" の関係は余り無いように思われます。

hajimek
頻繁なアドバイザー

シェルのloggerコマンドについて

yoshimura様、nt様

お世話になります。

loggerコマンドの件ですが、原因が分かりました。

結論から言いますとyoshimura様のご指摘の通り、syslogdのメッセージ抑止機能によるものでした。

loggerコマンドでsyslog.logに書きこまれる

メッセージには、タイプムタンプとホスト名が

自動的に書き込まれるため、同一メッセージの

省略には該当しないと考えておりましたが、

どうやらタイムスタンプを書き込むのはsyslogd

のようで、loggerはメッセージをsyslogdに送る

だけなのかもしれません。

"above message repeats X times"というメッセージがなかなかsyslog.logに書き込まれないかったために、気がつくまでに時間が掛かってしまいました。

とりあえず、今回のプログラムは一日一回起動

なため、抑止機能は働かないだろうということで

解決いたしました。

貴重なご意見どうもありうがとうございました。