標準の Logger#add
は Logger#log
の aliasだけど、 Rails 7.1系未満の ActiveSupport::Logger
だとadd
とlog
は挙動が違っていて、 ActiveSupport::Logger#add
は broadcast されるが、 ActiveSupport::Logger#log
だと broadcast されない。
# 設定次第だけど
# 標準出力とログファイルに出る
Rails.logger.add(1, 'hello')
# ログファイルだけに出る
Rails.logger.log(1, 'hello')
v6.1.7.7 activesupport/lib/active_support/logger.rbをみてみると、6系はこんな感じで add
だけがオーバーライドされてる。 log
は標準 Logger
と同じ動きをするはず。
define_method(:add) do |*args, &block|
logger.add(*args, &block)
super(*args, &block)
end
v7.1.3.2 activesupport/lib/active_support/broadcast_logger.rbをみてみるとはadd
とlog
がaliasになってる
def add(*args, &block)
dispatch { |logger| logger.add(*args, &block) }
end
alias_method :log, :add
https://github.com/rails/rails/pull/48615
このPRで入ったみたい。このPRは7.1系のものなので、7.0系もたぶん6系と同じ挙動するはず。