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')

🎂 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍