Ruby的stdlib Logger类是线程安全的吗?

jim*_*meh 29 ruby logging multithreading log4r thread-safety

简而言之,Ruby中的标准库Logger类是否是线程安全的?只有谷歌出现的有用信息才是论坛上有人说它"似乎"是线程安全的.而且我不想花时间测试记录器来试图弄清楚它是否存在.

暂时我使用的是log4r,它是线程安全的,但是如果标准库已经完成它就太过分了.

Avd*_*vdi 46

快速浏览logger.rb可以看到如下代码:

def write(message)
  @mutex.synchronize do
    if @shift_age and @dev.respond_to?(:stat)
      begin
        check_shift_log
      rescue
        raise Logger::ShiftingError.new("Shifting failed. #{$!}")
      end
    end
    @dev.write(message)
  end
end
Run Code Online (Sandbox Code Playgroud)

因此,虽然我不能保证它是否正确的线程安全,我可以确认它正在齐心协力做正确的事!

PS通过阅读代码,通常很容易回答这样的问题:-)