3

キューのステータスを確認し、ページのウィジェットの進行状況バーを変更するために、n 秒ごとに ajax 呼び出しが発生しています。もちろん、これは呼び出しをログにダンプします。アクションのエントリをログにフィルター処理したいと思います。これは Logger で実行できますか?

class QueueCallersController < ApplicationController

   # code to stop logger from logging my_ajax_action?       

   def my_action

     # auto log this

   end

   def my_ajax_action

     #  do not log this

   end

end
4

3 に答える 3

0

実用的なソリューションは、 https://github.com/rails/rails/issues/2639#issuecomment-6591735にあるコードに基づいており 、更新リンクを介してAhmad Sherifの回答で見つかりました。

# Usage: in develoopment.rb
#
#   config.middleware.insert_before Rails::Rack::Logger, DisableAssetsLogger
#
class DisableAssetsLogger
  def initialize(app)
    @app = app
    Rails.application.assets.logger = Logger.new('/dev/null')
  end

  def call(env)
    previous_level = Rails.logger.level
    Rails.logger.level = Logger::ERROR if env['PATH_INFO'].index("/assets/") == 0
    @app.call(env)
  ensure
    Rails.logger.level = previous_level
  end
end
于 2013-01-12T19:02:41.207 に答える
0

この問題にアプローチする方法はたくさんあると思いますが、資産ログのサイレンシングに関するこの回答に基づいた方法を次に示します。

if Rails.env.development?
  Rails.application.assets.logger = Logger.new('/dev/null')
  Rails::Rack::Logger.class_eval do
    def call_with_quiet_assets(env)
      previous_level = Rails.logger.level
      Rails.logger.level = Logger::ERROR if env['PATH_INFO'] =~ %r{^/queue_callers/my_ajax_action/} # Change the path here
      call_without_quiet_assets(env)
    ensure
      Rails.logger.level = previous_level
    end
    alias_method_chain :call, :quiet_assets
  end
end

ディレクトリ内のファイルにコードを追加してからconfig/initializers、サーバーを再起動します。

于 2013-01-11T23:19:25.253 に答える
0

ここで説明されているように、カスタム ロガーを使用できます。

http://dennisreimann.de/blog/silencing-the-rails-log-on-a-per-action-basis/

基本的に、アクションごとにデフォルトのロガーをカスタム ロガーに交換し、そのアクションのすべての出力を無音にします。他の場所で沈黙させるパスを指定する必要があります。これには、アクション自体にサイレンシング コードを追加するよりもクリーンで侵襲性が低いという利点があります。

于 2013-01-11T23:24:19.103 に答える