スキップしてメイン コンテンツに移動

RubyLoggerでログ保守

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 で出力したログは syslogjournald へ転送することも可能です。

require 'logger'
require 'syslog/logger'

log = Syslog::Logger.new('myapp')
log.info('アプリケーション起動')

また、logragelogstash-logger などのGemを併用すると、JSON形式でログを出力し、ELKスタックで可視化できます。デバッグ時には DEBUG レベルを有効にし、監視時には WARN 以上に設定して、必要な情報だけを残すようにしましょう。

この記事はAIによって作成されました。

コメント