2

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

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
4

2 回答 2

3

好的,看起来yield在第一个线程中其他线程会执行silence它会logger.level设置为ERROR,所以如果其他线程将在第一个线程之后结束,它会将 level 设置为ERROR永久。

于 2013-04-18T12:15:03.240 回答
2

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

于 2013-04-24T12:09:03.763 回答