From: eregontp@... Date: 2020-10-20T21:00:38+00:00 Subject: [ruby-core:100457] [Ruby master Bug#17203] Logger::Formatter won't work with non main Ractor Issue #17203 has been updated by Eregon (Benoit Daloze). Status changed from Open to Closed The PR was merged, and `$$` can be accessed from Ractors in #17268, I think we can close this. ---------------------------------------- Bug #17203: Logger::Formatter won't work with non main Ractor https://bugs.ruby-lang.org/issues/17203#change-88076 * Author: maciej.mensfeld (Maciej Mensfeld) * Status: Closed * Priority: Normal * Assignee: ko1 (Koichi Sasada) * 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: