我正在编写一个多记录器实现,以使我的应用程序能够记录到多个后端。实现看起来像:
class MultiLogger < Logger
def initialize(loggers = [])
@loggers = []
end
def add(severity, message, _attributes, _environment, progname)
@loggers.each do |logger|
logger.add(severity, message, progname)
end
end
def info(message, attributes, environment, progname)
add(Logger::INFO, message, attributes, environment, progname)
end
...
end
基本上我只是将调用转发给MultiLogger#add
实例化期间关联的所有记录器。问题是我需要将该记录器设置为 Rails 的默认记录器,但我不能这样做。
我正在添加config.logger = MultiLogger.new([Logger1.new, Logger2.new])
到我的application.rb
文件中,但是当我调用 时logger.info
,我收到了与add
方法的数量相关的错误。
最奇怪的是,我的自定义 add 从未被调用,并且该错误是从 引发的ActiveSupport::LogerThreadSafeLevel#add
,如下所示.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.2/lib/active_support/logger_thread_safe_level.rb:51:in 'add'
:
我想我遗漏了关于 Rails 日志记录机制内部工作的一些重要内容……但是什么?是ActiveSupport
覆盖我的add
方法吗?我能做些什么来避免这种情况?