[英]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.