[rails]ELBのヘルスチェックをアプリケーションログに残さないようにする
Ruby2.1.4, Rails4.1.7で確認。
ELB使用時にRails上にヘルスチェック用のアクションを作って、Railsアプリの状態チェックをするようにした場合、アプリケーションログにヘルスチェックのログが残ってしまいます。
ヘルスチェック用のアクションをつくることに関しては以前の記事を参照ください。
[rails]ELB使用時にヘルスチェック用のアクションを作成する上記記事に沿ってアクションを作成した場合は、以下のように /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からのアクセスのみアプリケーションログに残さないようにすることができました。