2013-01-11 40 views
2

我每隔n秒發生一次ajax調用,以檢查隊列狀態並修改我的頁面上的小部件進度條。這當然會將呼叫轉儲到日誌中。我想將行動的條目過濾到日誌中。這可以用Logger完成嗎?如何從Rails 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 

回答

0

嗯,我敢肯定有很多方法可以解決這個問題,但這裏有一個在此基礎上answer關於沉默的資產記錄。

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目錄中的文件,然後重新啓動服務器。

0

您可以使用自定義記錄如下所述:

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

基本上你換出一個自定義記錄器的默認記錄器上沉默所有輸出支持該行動的每個動作的基礎。您需要指定要在其他地方靜音的路徑。與添加動作本身內的靜音代碼相比,這具有更簡潔,更少入侵的優勢。

0

工作解決方案基於在https://github.com/rails/rails/issues/2639#issuecomment-6591735 找到的代碼,並通過更新鏈接通過的答案被發現。

# 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 
相關問題