我每隔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
答案 0 :(得分: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
目录中的文件,然后重新启动服务器。
答案 1 :(得分:0)
您可以使用此处所述的自定义记录器:
http://dennisreimann.de/blog/silencing-the-rails-log-on-a-per-action-basis/
基本上,您将基于每个操作的自定义记录器替换默认记录器,这会使该操作的所有输出静音。您需要在其他地方指定要静音的路径。与在操作本身中添加静默代码相比,这样做的优点是更清晰,侵入性更小。
答案 2 :(得分: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