hello-world
webエンジニアのメモ。とりあえずやってみる。

[rails]ELBのヘルスチェックをアプリケーションログに残さないようにする

公開日時

Ruby2.1.4, Rails4.1.7で確認。

ELB使用時にRails上にヘルスチェック用のアクションを作って、Railsアプリの状態チェックをするようにした場合、アプリケーションログにヘルスチェックのログが残ってしまいます。

ヘルスチェック用のアクションをつくることに関しては以前の記事を参照ください。

[[rails]ELB使用時にヘルスチェック用のアクションを作成する](http://blog.hello-world.jp.net/ruby/2104/)上記記事に沿ってアクションを作成した場合は、以下のように /health へのアクセスがアプリケーションログに記録されます。

# log/production.log

I, [2014-12-15T19:59:54.149846 #7459]  INFO -- : Started GET "/health" for 127.0.0.1 at 2014-12-15 19:59:54 +0900
I, [2014-12-15T19:59:54.298638 #7471]  INFO -- : Started GET "/health" for 127.0.0.1 at 2014-12-15 19:59:54 +0900

他のログを見ている最中にこのヘルスチェックログが何度も出てきてログが追い辛くなったので、ヘルスチェックのログのみ消せないか調べてやってみました。

  • CustomLoggerクラスを追加

lib以下にautoloadディレクトリを作成しcustom_logger.rbを追加します。

Rails.logger.silenceブロック内の処理はアプリケーションログに記録されないそうなので、 /health の場合はログに残さないようにしています。

# lib/autoload/custom_logger.rb

class CustomLogger < Rails::Rack::Logger
  def call(env)
    if ['/health'].include?(env['PATH_INFO'])
      Rails.logger.silence do
        super
      end
    else
      super
    end
  end
end
  • lib/autoload 以下をオートロードするように設定を書いておきます
# config/application.rb

config.autoload_paths += %W(#{config.root}/lib/autoload)
  • initializersにCustomLoggerの初期設定を追加
# config/initializers/custom_logger.rb

require "custom_logger"
Sample::Application.config.middleware.swap Rails::Rack::Logger, CustomLogger

これでELBからのアクセスのみアプリケーションログに残さないようにすることができました。

参考


Related #Rails

[rails]ELB使用時にヘルスチェック用のアクションを作成する

ELBにrailsアプリをぶら下げる場合、railsアプリが落ちたらELBから外れてもらいたいです。

[rails]carrierwaveで保存した画像のurlを取得する

carrierwave 0.10.0 で確認 imageカラムにcarrierwaveで保存した画像を保存している場合、デフォルトのままだとだとurlメソッドを実行してもpublic以下のパスのみで http://~ が設定されていません。