LoginSignup
17
18

More than 5 years have passed since last update.

特定の条件でRailsのログ出力を抑止する

Posted at

にゃんぱすー

ロードバランサのヘルスチェックで log/production.log が埋め尽くされるのが辛いので、特定の条件でログ出力を抑止する方法を調べたよ。

ロガークラスを作成する

まず、Rails::Rack::Loggerを継承したCustomLoggerを作成する。

lib/custom_logger.rb
class CustomLogger < Rails::Rack::Logger
  def call(env)
    if env["REMOTE_ADDR"] =~ Moe::Application.config.action_dispatch.trusted_proxies and !env["HTTP_X_FORWARDED_FOR"]
      Rails.logger.silence do
        super
      end
    else
      super
    end
  end
end

ここでは、ロードバランサのIPアドレスはtrusted_proxiesにマッチすること、通常のクライアントからのアクセスはヘッダにX-Fowarded-Forが付いていることを前提として、ヘルスチェックの場合のみRails.logger.silenceを呼び出してログ出力を抑止している。(クライアントのIPアドレスに置き換わるrequest.remote_ip的な情報が取れれば良いのだが、見つからなかった。)

ロガークラスの入れ替え

config/initializers に適当なファイルを置く。

config/initializers/custom_logger.rb
require "custom_logger"
Moe::Application.config.middleware.swap Rails::Rack::Logger, CustomLogger

テスト

wgetとかtelnetで。

# ログが記録される
wget -O /dev/null --header="X-Forwarded-For: 192.0.2.100" http://www.example.com/

# ログが記録されない
wget -O /dev/null http://www.example.com/

おしまい。

17
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
18