Bash:
ロギング
どうやって:
Bashでのログは、出力をファイルにリダイレクトまたは追記することで簡単に実現できます。基本的な例を以下に示します:
echo "スクリプト開始..." >> script.log
# ここにスクリプトのコマンドを入れます
echo "スクリプト完了 $(date)" >> script.log
もっと高度なことをしたい場合、システム全体のログにsyslogを組み込むこともできます:
logger "私のスクリプトからのカスタムメッセージ"
logger
はログメッセージをsyslogサービスに送信し、その後システムのsyslog設定に従って処理されます。
script.log
にキャプチャされたサンプル出力:
スクリプト開始...
スクリプト完了 Tue Mar 23 09:26:35 PDT 2021
詳細解説
歴史的にUnix系システムでは、syslogサービスによってログが容易にされてきました。これにより、異なるアプリケーションやシステムの部分がメッセージを中央集約的にログすることができます。これにより、システム全体にわたる標準化されたログメカニズムの実装が可能になります。
代替手段としては、syslog-ng
や rsyslog
を使用してより高度なログ機能を実現する、あるいは解析目的で時系列データベースにログを書き込むことを考えるかもしれません。より複雑なレベルのアプリケーションの場合、ログ4j(Javaエコシステム内)やMonolog(PHP内)のような専用のログライブラリやアプリケーションを使用して、構造化された設定可能なログオプションを提供することが、Bashのようなスクリプト言語でも意味をなす場合があります。
ログの実装方法は、アプリケーションの要件に大きく依存します。単にスクリプトの進行を追跡するためにシンプルな出力を必要とする場合は、メッセージをファイルに追加することは簡単で便利です。しかし、よりスケーラブルで堅牢なログを求めている場合は、ログローテーション、ログレベル、リモートログなどの機能をサポートするログシステムとの統合を目指すべきでしょう。
また、参照してみてください
logger
やsyslog
関数のman
ページはいつもあなたの友達です。man logger
やman syslog
を試してみてください。- システムログについて詳しく知りたい場合は、
rsyslog
およびsyslog-ng
のドキュメントをお読みください。 - Unix系システムにおけるログの歴史的背景と基本原則についての詳細は、RFC 5424に記載された
Syslog
プロトコルで体系的な情報を得ることができます。