Ruby on rails 这个RubyonRails代码是线程安全的吗?
我对JRuby on Rails应用程序中的Ruby on rails 这个RubyonRails代码是线程安全的吗?,ruby-on-rails,ruby,multithreading,thread-safety,jruby,Ruby On Rails,Ruby,Multithreading,Thread Safety,Jruby,我对JRuby on Rails应用程序中的Logger有问题。一个线程将日志级别更改为error,并且不会更改回error。这段代码是线程安全的,还是应该寻找其他发生这种情况的地方 好的,看起来在第一个线程中的yield期间,其他线程将执行silent操作,它将logger.level设置为ERROR,因此如果其他线程将在第一个线程之后结束,它会将级别永久设置为ERROR。我在Rails logger和JRuby中遇到了同样的线程安全问题。我不知道您是否正在寻找解决方案,但此修复程序对我有效
Logger
有问题。一个线程将日志级别更改为error,并且不会更改回error。这段代码是线程安全的,还是应该寻找其他发生这种情况的地方
好的,看起来在第一个线程中的
yield
期间,其他线程将执行silent
操作,它将logger.level
设置为ERROR
,因此如果其他线程将在第一个线程之后结束,它会将级别永久设置为ERROR
。我在Rails logger和JRuby中遇到了同样的线程安全问题。我不知道您是否正在寻找解决方案,但此修复程序对我有效:。感谢链接,此代码现在已经过时,但基于此,我创建了我的版本。
def silence
message = "ActiveSupport::Benchmarkable#silence is deprecated. It will be removed from Rails 4.1."
ActiveSupport::Deprecation.warn message
old_logger_level, logger.level = logger.level, ::Logger::ERROR if logger
yield
ensure
logger.level = old_logger_level if logger
end