RubyLoggerでログ保守
Ruby実践でのLogger導入
Rubyでログを扱う際に最もポピュラーなクラスは Logger です。標準ライブラリに含まれているため、追加のGemをインストールせずにすぐに使えます。まずは require 'logger' をファイルの先頭に書くことで、Logger クラスを利用可能にします。
require 'logger'
log = Logger.new(STDOUT)
log.info('Logger が初期化されました')
このように簡単にログ出力を開始できます。STDOUT の代わりにファイル名を渡すと、ログをファイルに書き込むことも可能です。
ログ出力とレベル設定
Logger には DEBUG, INFO, WARN, ERROR, FATAL の5つのレベルが用意されています。レベルは数値で表され、デフォルトは INFO です。レベルを下げると、より詳細な情報を出力できます。
log.level = Logger::DEBUG
log.debug('デバッグ情報')
log.info('情報メッセージ')
log.warn('警告メッセージ')
log.error('エラーメッセージ')
log.fatal('致命的エラー')
レベル設定は監視やデバッグ時に非常に重要です。開発環境では DEBUG を、運用環境では WARN 以上に設定することで、必要な情報だけを残すことができます。
ローテーションと履歴保持
長時間稼働するアプリケーションではログファイルが膨大になるため、ローテーション機能を使ってファイルを分割します。Logger には Logger.new('logfile.log', 'daily') のように第二引数でローテーションの頻度を指定できます。
log = Logger.new('app.log', 'daily', 10485760, 5)
# 1日ごとにローテーションし、10MBを超えると新しいファイルへ
# 5つまで履歴を保持
この設定により、app.log.1 から app.log.5 までの履歴が保持され、古いログは自動で削除されます。履歴保持は監視やトラブルシューティングに不可欠です。
デバッグと監視の実践
実際の運用では、ログを外部の監視ツールに送信したり、リアルタイムで分析したりするケースが増えています。Logger で出力したログは syslog や journald へ転送することも可能です。
require 'logger'
require 'syslog/logger'
log = Syslog::Logger.new('myapp')
log.info('アプリケーション起動')
また、lograge や logstash-logger などのGemを併用すると、JSON形式でログを出力し、ELKスタックで可視化できます。デバッグ時には DEBUG レベルを有効にし、監視時には WARN 以上に設定して、必要な情報だけを残すようにしましょう。
コメント
コメントを投稿