RubyのLoggerはスレッドセーフ(&プロセスセーフ)かどうか調べてみたの記事の続編です。

結論から言うと、RubyのLoggerはプロセスセーフになります!

対象のプルリクはこちらで Inter-process locking for log rotation by sonots · Pull Request #428 · ruby/ruby 、無事にマージされて ruby 2.1.0 として 2013/12/25 にリリースされます!

これで Fluentd v11 とか Unicorn とかといったマルチプロセスなアプリでも Ruby Logger のログローテーションを安全に使えますね。Ruby 2.1.0 のリリースを待てない方は gem も作っておいたので、必要であればそちらを使ってください!→ https://github.com/sonots/process_safe_logger

裏話

元々は Fluentd (正確には ServerEngine) の 
Issue として @frsyuki 氏と議論、対応していたものです。それを、

という流れで、Ruby にプルリクを送ったものになります。該当 pull request では、@nalsh 氏にレビューおよびアドバイスをしていただきました。ありがとうございました。

あとは最後に、今来ている RubyConf 2013 at Miami で今回のネタを元に LT してきた資料をおいておきますね。

Is ruby logger thread(process)-safe? at RubyConf 2013 from Naotoshi Seo

ということでマルチプロセス環境でも使えるようになりましたのでご活用ください!それでは @sonots でした!