地味に使えるloggerコマンド

仕事でrsyslogを使っていますが、ロガーコマンドについてはこれまで勉強してこず、初歩的な使い方すら知らなかったため、備忘。

 

loggerコマンド。

 

おそらくLinuxに標準で入っているロガーだと思いますが、ちょっとした確認に便利だし、運用ツールの監視通知などにも使っています。

 

基本的な使い方は、

 

logger "出力メッセージ"

 

です。

 

logger "Message test."

 

ノーマルだと/var/log/messagesに出ます。こんな出力になります。(以下のrhel73は私の環境のホスト名です)

 

Dec 20 01:34:57 rhel73 root: Message test.

 

しかしログの出力先は自由に制御したいことが多いですので、その場合は以下のようにします。

 

logger -p 【ファシリティ】.【プライオリティ】 【メッセージ】

 

ファシリティは、メッセージの種類を示しています。/etc/rsyslog.confに定義していますが、RHELでデフォルトで入っている主要な設定は以下のようです。

 

  • authpriv ・・・ /var/log/secure
  • mail ・・・ /var/log/maillog
  • cron ・・・ /var/log/cron
  • uucp,news,crit ・・・ /var/log/spooler
  • local7 ・・・ /var/log/boot.log

 

local0~local7は、ユーザが自由に使えるものですが、なぜかlocal7が起動ログになっています。よくわかりません。

 

プライオリティは、その名の通り、優先度です。メッセージの重要度に応じて以下のように定義されています。

 

  • emerg ・・・ 緊急。ここに出すと全ログインユーザのTTYに有無を言わさず即時表示されます。log4jでfatalを出すとここにマッピングされるようです。
  • alert ・・・ 注意。emergの次にやばいですが、ユーザのTTYに強制表示はされないようです。
  • crit ・・・ 致命的。致命的と言いつつalertの下です。
  • err ・・・ エラー。普通のエラーはここになります。
  • warning ・・・ ワーニング。なにかあったよ程度でしょうか。
  • notice ・・・ 通常メッセージはこれを使います。
  • info ・・・ まあまあ。
  • debug ・・・ 使ったことありません。

 

以下コマンド例です。

 

logger -p local7.emerg "FATAL ERROR : システムに異常が発生しました。"

 

ログには以下のように出力されます。

 

Dec 20 01:48:16 rhel73 root: FATAL ERROR : システムに異常が発生しました。

 

 

 

これでも機能的にはまあいいかもしれませんが、運用に使うにはもう少しオプションを足します。

 

logger -p 【ファシリティ】.【プライオリティ】 -t 【タグ】 【メッセージ】

 

 

logger -ip local7.emerg -t ApplicationName "FATAL ERROR : システムに異常が発生しました。"

 

Dec 20 01:53:29 rhel73 ApplicationName[2441]: FATAL ERROR : システムに異常が発生しました。

 

-iオプションを付与すると、loggerコマンドのプロセスIDが出力されます。

 

-tオプションを付与すると、指定したタグが出力されます。通常はここにプログラムやシェルの名前をセットします。

 

ほかにも、-sオプションを付与すると、ユーザの標準出力に表示します。ただし、プライオリティにemergを指定した場合のように、他人のTTYに表示したりはしません。私は今のところ使ったことがありません。

 

あと、先日あったのが、複数行の出力。これはloggerのオプションというわけではなく、他のコマンドとの合わせ技ですが、ログに複数行出力したいような場合があります。echoの-eオプションと組み合わせます。

 

echo -e "Fatal error occured.\nPlease check system status." | logger -t ApplicationName -ip local7.emerg

 

このコマンドを実行すると、ログには以下のように2行出力されます。

 

Dec 20 02:01:39 rhel73 ApplicationName[2509]: Fatal error occured.
Dec 20 02:01:39 rhel73 ApplicationName[2509]: Please check system status.

 

上記は改行として\nを途中に入れましたが、タブなら\tです。

同様に、いろんなコマンドとパイプでつなぎ合わせて使えます。

 

 

ではでは。今日はこの辺で。