From: maciej@... Date: 2020-09-29T15:17:51+00:00 Subject: [ruby-core:100216] [Ruby master Bug#17203] Logger::Formatter won't work with non main Ractor Issue #17203 has been reported by maciej.mensfeld (Maciej Mensfeld). ---------------------------------------- Bug #17203: Logger::Formatter won't work with non main Ractor https://bugs.ruby-lang.org/issues/17203 * Author: maciej.mensfeld (Maciej Mensfeld) * Status: Open * Priority: Normal * ruby -v: ruby 3.0.0preview1 (2020-09-25 master 0096d2b895) [x86_64-linux] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- ``` ruby 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: ```bash 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/ -- https://bugs.ruby-lang.org/ Unsubscribe: