開発環境のログがログとして全然機能していなかった。
ログに値以外の情報が出ないのは使い物にならないので、ちゃんと設定する。
logger.debug("debug") # => debug
logger.info("info") # => info
logger.warn("warn") # => warn
logger.error("error") # => error
ログファイルの出力先の設定
config/environments/development.rb に好みの出力先を記述する。
今回は開発環境なので標準出力を選択した。
# ログを標準出力に表示
config.logger = Logger.new(STDOUT)
# ログを標準エラー出力に表示
config.logger = Logger.new(STDERR)
# ログを無効にする
config.logger = nil
# ログを指定ファイルに出力する
config.logger = Logger.new('/var/log/rails/development.log')
# ログを毎日ローテートする
config.logger = Logger.new('/var/log/rails/development.log', 'daily') # weekly, monthly も使用可
# ログを10MB毎に10ファイルまで作成する
config.logger = Logger.new('/var/log/rails/development.log', 10, 10.megabytes)
出力するログレベル
指定したレベル以上のログが出力されるようになる
:unknown, :fatal, :error, :warn, :info, :debug の6つから選ぶ
config.log_level = :debug
どのリクエストによって出力されたログかを判別できるようにする
config.log_tags = [:request_id, :remote_ip]
を追記。 request_id と remote_ip をログに出力するようになる
フォーマットを設定
config.logger.formatter = ::Logger::Formatter.new
最初のログがこんな感じになる。
D, [2018-05-26T22:33:34.762896 #28] DEBUG -- : [c70b1984-21cd-4f54-bddb-50d8a5126c0e] [172.18.0.1] debug
I, [2018-05-26T22:33:34.762922 #28] INFO -- : [c70b1984-21cd-4f54-bddb-50d8a5126c0e] [172.18.0.1] info
W, [2018-05-26T22:33:34.762940 #28] WARN -- : [c70b1984-21cd-4f54-bddb-50d8a5126c0e] [172.18.0.1] warn
E, [2018-05-26T22:33:34.762962 #28] ERROR -- : [c70b1984-21cd-4f54-bddb-50d8a5126c0e] [172.18.0.1] error
View の Render ログを無効にする
基本的に不要だと思うので無効にしておく。
config.action_view.logger = nil
最終的な設定
config.logger = Logger.new(STDOUT)
config.log_level = :debug
config.log_tags = [:request_id, :remote_ip]
config.logger.formatter = ::Logger::Formatter.new
config.action_view.logger = nil
カスタムフォーマット
試していないが、独自フォーマットもできるらしい。
config.logger.formatter = proc do |severity, datetime, progname, msg|
"[#{severity}]#{datetime}: #{progname} : #{msg}\n"
end
トラブルシューティング
Docker 内で rails server を起動していて、ログ出力しようとしたら以下のようなメッセージが出る場合
Cannot render console from 172.18.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
関連する設定はこれ。
- config.web_console.whitelisted_ips
- 認証済みの IPv4/IPv6アドレスとネットワークのリスト
(デフォルト: 127.0.0.1/8、::1)
- 認証済みの IPv4/IPv6アドレスとネットワークのリスト
- config.web_console.whiny_requests
- コンソール出力が抑制されている場合にメッセージをログ出力する
(デフォルト: true)
- コンソール出力が抑制されている場合にメッセージをログ出力する
config/environments/development.rb に以下の設定を追加。
config.web_console.whitelisted_ips = '0.0.0.0/0'
参考
- http://railsdoc.com/config
- http://guides.rubyonrails.org/debugging_rails_applications.html#the-logger
- https://blog.freedom-man.com/rails-logger-codereading/
- https://qiita.com/suin/items/9b567c63af73b235e458
- http://daily.belltail.jp/?p=2270