読者です 読者をやめる 読者になる 読者になる

Rails Webook

自社のECを開発している会社で働いています。Rails情報やサービスを成長させる方法を書いていきます

Railsでのログ/ロガーまとめ(ログ出力、ログレベル、ロガー作成、ログフォーマット)

Rails初級 運用 まとめ

f:id:nipe880324:20150110132541j:plain:w520
Photo by Flickr: Humboldt State University's Photostream


Railsでログ出力を行う、ログレベルを設定する、新たにロガーを作成する、ログのフォーマットを設定する方法などRailsのログに関することをまとめました。

動作確認

  • Rails 4.1

目次


1. ログを出力する

loggerを使うことでコントローラー、モデル、ビューなどからロガーで設定されたログ出力先にログを出力することができます。

logger.debug "ログ出力先にDebugレベルで情報を出力する"


次の5つのメソッドが用意されており、それぞれログレベルに出力有無が変わります。

logger.fatal "致命的なエラー情報"
logger.error "エラー情報"
logger.warn  "警告情報"
logger.info  "お知らせ情報"
logger.debug "デバッグ情報"


2. ログレベルを設定する

まず、ログレベルの使い分けは次のようになっています。

fatal  # プログラムがクラッシュしたなどエラーハンドリングできないエラー
error  # エラーハンドリングできるエラー
warn   # 警告
info   # システム操作に対する一般的な役に立つ情報
debug  # 開発者向けの詳細な情報


Railsでログレベルを設定するには、config/development.rbconfig/test.rbconfig/production.rb内で次のように記載します。
設定したログレベルより低い(fatal > error > warn > info > debug)ログは出力されなくなります。

# :fatal, :error, :warn, :info, :debugが設定可能
config.log_level = :warn  # logger.info と logger.debugの内容は出力されない


もしくは、上記のinitializers以外でログレベルを変更したい場合は次のようにします。

Rails.logger.level = 0  # :debug
# 4 :fatal, 3 :error, 2 :warn, 1 :info, 0 :debug


各環境ごとのデフォルトのログレベルは次のとおりです。

development # => debug
test        # => debug
production  # => info


3. 新たにロガーを作成する

Railsでロガーを作成するには、config/development.rbconfig/test.rbconfig/production.rb内で次のように記載します。

# log/developmetn.logに出力するロガーを作成。週ごとにログファイルがローテートされる
config.logger = Logger.new('log/development.log', 'weekly')

# log/developmetn_special.logに出力する2つ目のロガーを作成。日ごとにログファイルがローテートされる
config.special_logger = Logger.new('log/development_special.log', 'daily')


コントローラー、モデル、ビューなどで上記で作成したログを使うことができます。

logger.debug "log/development.logに出力します"

# 新たに定義したロガーは次のような指定をしないといけない
Rails.application.config.special_logger.debug "log/development_special.logに出力される"


4. ログのフォーマットを設定する

Railsでロガーを作成するには、config/development.rbconfig/test.rbconfig/production.rb内でformatterを設定します。

デフォルトのフォーマッターは次のように設定します。

config.logger.formatter = ::Logger::Formatter.new

# ログ内容です。
I, [2014-12-18T22:50:46.439420 #42595]  INFO -- : Started GET "/users" for 127.0.0.1 at 2014-12-18 22:50:46 +0900
I, [2014-12-18T22:50:46.585090 #42595]  INFO -- : Processing by UsersController#index as HTML


また、自分でログフォーマットをカスタマイズすることができます。

config.logger.formatter = proc do |severity, datetime, progname, msg|
  "[#{severity}]#{datetime}: #{progname} : #{msg}\n"
end

# ログ内容です。
[INFO]2014-12-18 22:48:40 +0900:  : Started GET "/users" for 127.0.0.1 at 2014-12-18 22:48:40 +0900
[INFO]2014-12-18 22:48:40 +0900:  : Processing by UsersController#index as HTML


以上です。