Railsのログについて(Rails.logger)


loggerを使うことでRailsのコード上から、ログを出力できます。

logger.info '文字列をログファイルに書き出す'

loggerは次の5つのレベルを持ち、設定によって書き出すログのレベルを制御します。

オプション 説明
fatal プログラムのクラッシュなど、制御できないエラー
error プログラムで制御できるエラー
warn 警告
info システム操作や、管理に役立つ情報
debug 開発者向けの情報

🏈 RSpecでのテストの書き方

RSpecでログへの出力をチェックしたい場合は次のように書きます。気を付けるべきことは、実際の動作を行う前にモックを作っておくことです。

it 'writes some message in log' do
expect(Rails.logger).to receive(:info).with(some message)
do_something() # 実際の動作を行う
end

🐞 設定

設定ファイルconfig/development.rbconfig/test.rbconfig/production.rbに対して次の設定を行います。

標準出力にログを書き出す

標準出力にログを書き出す場合は次のように設定します。

# STDOUT(標準出力)への書き出し
config.logger = Logger.new(STDOUT)

出力フォーマッタの調整

config/environments/xxx.rbに次の内容を設定することで出力フォーマットを変更できます。::Logger::Formatter.newで日付やプロセスidを表示できます。

config.log_formatter = ::Logger::Formatter.new
I, [2017-08-04T07:32:43.777013 #37953] INFO -- : Rendered layouts/_navigation_bar.html.haml (30.8ms)
I, [2017-08-04T07:32:43.779784 #37953] INFO -- : Rendered layouts/_footer.html.haml (1.4ms)
I, [2017-08-04T07:32:43.780264 #37953] INFO -- : Completed 200 OK in 5159ms (Views: 4613.5ms | ActiveRecord: 492.9ms)

ログの出力内容をカスタマイズすることもできます。

config.log_formatter = proc do |severity, datetime, progname, msg|
"[#{severity}]#{datetime}: #{progname} : #{msg}\n"
end
[INFO]2017-08-04 07:37:08 +0900: : Rendered layouts/_navigation_bar.html.haml (40.6ms)
[INFO]2017-08-04 07:37:08 +0900: : Rendered layouts/_footer.html.haml (2.5ms)
[INFO]2017-08-04 07:37:08 +0900: : Completed 200 OK in 4992ms (Views: 4535.3ms | ActiveRecord: 395.1ms)

ログの出力レベルを制御

出力したいログレベルを設定します。この場合はerrorより低いレベルwarn,info,debugは出力されません。

config.log_level = :error

ログを日付別のファイルにする

日ごとや週ごとにログをローテートしたい場合は次のように設定します。

config.logger = Logger.new('log/development.log', 'daily')

🍣 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)