这个ruby on rails代码线程是否安全?

时间:2013-04-18 11:58:50

标签: ruby-on-rails ruby multithreading thread-safety jruby

我在JRuby on Rails应用程序中遇到Logger的问题。一个线程将日志级别更改为错误,并且不会更改回来。这段代码是线程安全的,还是应该寻找其他发生的地方?

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/benchmarkable.rb#L50

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

2 个答案:

答案 0 :(得分:3)

好吧,看起来在第一个帖子的yield期间,其他帖子会silencelogger.level设置为ERROR,所以如果其他帖子将在之后结束第一个,它将永久设置为ERROR

答案 1 :(得分:2)

我遇到过与Rails记录器和JRuby相同的线程安全问题。我不知道您是否在寻找解决方法,但此修复程序对我有用:http://log.kares.org/2011/04/railslogger-is-not-threadsafe.html