2019年9月18日水曜日

[解決] Rails5でカスタムログにremote_ipを出力する (resolved : Rails5 Logger remort_ip custom log)

中の人です。

もう、SEO担当じゃないけど、タイトルはそのまんま。

RailsのLoggerで以下の様にすればIPアドレスが出力されるのは
色々なブログなんかで紹介されている。
config.log_tags = [:remote_ip]

が、別のログファイルを作成して出力するとlog_tagsは適用されない。
(これもどこかで見かけた。)

じゃあ、どうすればいいのか。

logger.rbのここでIPアドレス(remote_ip)は出力されるが
独自のログファイルには出力されない。
    @logdev.write(
      format_message(format_severity(severity), Time.now, progname, message))

development.rbにて以下を記述するとログファイルは作成されるが
test.logにはremote_ipは出力されない。

  config.log_tags = [:remote_ip, :user_agent, :request_id]
  config.logger = Logger.new("log/development.log", 'daily')
  config.test_logger = Logger.new(Rails.root.join('log/test.log'), 'daily')

  config.logger.formatter  = Logger::Formatter.new
  config.test_logger.formatter = Logger::Formatter.new

  config.logger =ActiveSupport::TaggedLogging.new(config.logger)
  config.test_logger =ActiveSupport::TaggedLogging.new(config.test_logger)

◆対処
前述のformatterを設定する箇所を以下で書き変えるとremote_ipが出力される。
  config.logger.formatter  = Logger::Formatter.new
  config.test_logger.formatter = config.logger.formatter

以上。