Rails の開発環境ログ設定方法

開発環境のログがログとして全然機能していなかった。
ログに値以外の情報が出ないのは使い物にならないので、ちゃんと設定する。

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)
  • config.web_console.whiny_requests
    • コンソール出力が抑制されている場合にメッセージをログ出力する
      (デフォルト: true)

config/environments/development.rb に以下の設定を追加。

config.web_console.whitelisted_ips = '0.0.0.0/0'

参考