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

[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からのアクセスのみアプリケーションログに残さないようにすることができました。

参考


Related #Rails

[rails]fragment cacheを使ってみる

fragment cacheを使うとテンプレートの一部を部分的にキャッシュすることが可能になります。

[ruby][rails]sidekiqのnamespaceにハマった

sidekiq3.0.1で確認。

[Rails]migrationで外部キーを設定する際に、参照先テーブルと異なるカラム名をつけたい場合

migration時に外部キーを設定する場合、referencesを使いますが、参照先テーブルと異なるカラム名をつけたい場合はどうしようと思い調べてみました。

wheneverの設定をcronに反映するコマンドメモ

Rubyでcronのバッチを作成したい場合に whenever をよく使うのですが、cron反映コマンドを毎回忘れて調べているので書き留めておきます。