はじめに
ログの出力や設定などについて調べた内容をまとめます。
ログレベル
ログレベル | 内容 | |
---|---|---|
0 | :debug | デバッグ用の情報など |
1 | :info | 通知 |
2 | :warn | 警告 |
3 | :error | 制御可能なエラー |
4 | :fatal | 制御不可能なエラー |
5 | :unknown | 不明なエラー |
出力するログレベルを設定
- 環境ごとに個別に設定する
- デフォルトでは、development環境とtest環境が
:debug
、production環境は:info
に設定されている - production環境は不要なログを出力しないように注意する
config/environments/development.rb
config.log_level = :debug
# もしくは Rails.logger.level = 0
config/environments/production.rb
config.log_level = :info
# もしくは Rails.logger.level = 1
ログを書き込む
- 設定方法
logger.debug "hoge"
# logger.(debug|info|warn|error|fatal) "[書き込むメッセージ]"
- 設定例
class ArticlesController < ApplicationController
# ...
def create
@article = Article.new(article_params)
logger.debug "新しい記事: #{@article.attributes.inspect}"
logger.debug "記事が正しいかどうか: #{@article.valid?}"
if @article.save
logger.debug "記事は正常に保存され、ユーザーをリダイレクト中..."
redirect_to @article, notice: '記事は正常に作成されました。'
else
render :new
end
end
# ...
private
def article_params
params.expect(article: [:title, :body, :published])
end
end
パフォーマンスに与える影響に注意する
-
:debug
は多くの文字列を評価するため、パフォーマンスへの影響が大きい - ロガーメソッドに渡すものはブロック形式にする
- ブロックの評価は遅延評価される
logger.debug { "Person attributes hash: #{@person.attributes.inspect}" }
おわりに
ログのクリア(rake:log clear
)も定期的に行うようにしたいと思います。Railsガイドに記載のあるdebug gemも使いやすそうなので、今度試してみたいと思います。
参考