我正在尝试禁用生产中的缓存记录。已成功使SQL停止记录查询,但没有运气缓存日志条目。生产日志中的示例行:
CACHE (0.0ms) SELECT `merchants`.* FROM `merchants` WHERE `merchants`.`id` = 1 LIMIT 1
我不想禁用所有日志记录,因为我希望logger.debug语句显示在生产日志中。 使用rails 3.2.1与Mysql和Apache。 有什么建议吗?
答案 0 :(得分:2)
我使用下面链接的帖子建议的方法使CACHE日志静音。
我用一个包装器替换了默认的ActiveRecod记录器,该包装器过滤掉包含不需要的文本的消息,即“CACHE”。
首先,在config/initializers
内创建一个文件,例如active_record.rb
,并在文件中定义一个包装类并替换活动记录记录器,如下面的代码所示:
# Implementation of logger that ignores messages containing forbidden words
# here “CACHE” and "Settings Load"
class CacheFreeLogger < ActiveSupport::TaggedLogging
@@excluded = ['Settings Load','CACHE']
def add(severity, message = nil, progname = nil, &block)
if message.nil?
if block_given?
message = block.call
else
message = progname
progname = nil #No instance variable for this like Logger
end
end
if severity > Logger::DEBUG || !(@@excluded.map{|e| message.include? e}.include?(true))
@logger.add(severity, "#{tags_text}#{message}", progname)
end
end
end
#Replace the existing logger with the filtering one
ActiveRecord::Base.logger = CacheFreeLogger.new(ActiveRecord::Base.logger) if Rails.env.development?
原始帖子扩展了Logger而不是TaggedLoggin,但它对我不起作用。
博客中提供了此方法:http://heliom.ca/blog/posts/disable-rails-cache-logging
答案 1 :(得分:1)
Rails 5.1
# config/initializers/active_record_logger.rb
class CacheFreeLogger < ActiveSupport::Logger
def add(severity, message = nil, progname = nil, &block)
return true if progname&.include? "CACHE"
super
end
end
ActiveRecord::Base.logger = CacheFreeLogger.new(STDOUT)
答案 2 :(得分:-1)