繁体   English   中英

这个Ruby on Rails代码线程安全吗?

[英]Is this ruby on rails code thread safe?

我在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

好的,看起来在第一个线程的yield期间其他线程将silence ,它将logger.level设置为ERROR ,因此,如果其他线程在第一个线程之后结束,它将永久地将级别设置为ERROR

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM