地味に使える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です。
同様に、いろんなコマンドとパイプでつなぎ合わせて使えます。
ではでは。今日はこの辺で。