Railsは便利。
本番サービスを稼働させている時、ヘルスチェックパスなど特定のパスへのリクエストのログはいらない、なんてことはよくある。
ALBを使うとヘルスチェックは必須だし、Zabbixなどでヘルスチェックを組み込む場合も同様である。
今回は、特定のパスに関するログを出力しないようにする方法の書き溜め。
私の場合、Railsのログをcloudwatch logsに出力している都合、
1秒に1回リクエストされるヘルスチェックパスのログは正直不要で、費用がかさむだけだから消したかった。
Rails loggerでログを出力させない方法
やり方は色々あるだろうけど、今回の方法をざっくりいうと、Rails::Rack::Loggerを継承したクラスを作成する。
Rails.logger.silence で特定のパスならログ出さないよー、ってやっている。
パス情報はenv["REQUEST_PATH"]で取得できる。
config/initializers/my_custom_logger.rbというファイルを追加して下記のクラスを実装する。
1 2 3 4 5 6 7 8 9 10 11 12 |
class MyCustomLogger < Rails::Rack::Logger def call(env) if env["REQUEST_PATH"] == "/health_path" Rails.logger.silence do super end else super end end end Webapi::Application.config.middleware.swap Rails::Rack::Logger, MyCustomLogger |
Railsって便利すぎる。。
じゃあね〜〜。