Actions
Bug #17203
closedLogger::Formatter won't work with non main Ractor
Description
class Rogger < Ractor
def self.new
super do
# STDOUT cannot be referenced but $stdout can
logger = ::Logger.new($stdout)
# Run the requested operations on our logger instance
while data = recv
logger.public_send(data[0], *data[1])
end
end
end
# Really cheap logger API :)
def method_missing(m, *args, &_block)
self << [m, *args]
end
end
class Rails
LOGGER = Rogger.new
def self.logger
LOGGER
end
end
Ractor.new do
Rails.logger.info "Hello"
end
running this ends up with:
terminated with exception (report_on_exception is true):
ruby/3.0.0/logger/formatter.rb:15:in `call': can not access global variables $$ from non-main Ractors (RuntimeError)
from ruby/3.0.0/logger.rb:586:in `format_message'
from ruby/3.0.0/logger.rb:476:in `add'
from ruby/3.0.0/logger.rb:529:in `info'
from test.rb:23:in `public_send'
from test.rb:23:in `block in new'
however the same with fixed formatter works.
PR: https://github.com/ruby/ruby/pull/3600
All of the code examples are here: https://mensfeld.pl/2020/09/building-a-ractor-based-logger-that-will-work-with-non-ractor-compatible-code/
Actions
Like0
Like0Like0Like0Like0