From: "no6v (Nobuhiro IMAI)" Date: 2013-11-20T15:07:42+09:00 Subject: [ruby-core:58443] [ruby-trunk - Bug #9130] logger continues to write in old log file after rotation Issue #9130 has been updated by no6v (Nobuhiro IMAI). =begin We should also compare inode of @filename and @dev, right? The following patch works fine for me. diff --git a/lib/logger.rb b/lib/logger.rb index c70b091..071594d 100644 --- a/lib/logger.rb +++ b/lib/logger.rb @@ -645,7 +645,7 @@ private File.open(@filename, File::WRONLY | File::APPEND) do |lock| lock.flock(File::LOCK_EX) # inter-process locking. will be unlocked at closing file ino = lock.stat.ino - if ino == File.stat(@filename).ino + if ino == File.stat(@filename).ino and ino == @dev.stat.ino yield # log shifting else # log shifted by another process (i-node before locking and i-node after locking are different) =end ---------------------------------------- Bug #9130: logger continues to write in old log file after rotation https://bugs.ruby-lang.org/issues/9130#change-43040 Author: no6v (Nobuhiro IMAI) Status: Open Priority: Normal Assignee: Category: lib Target version: ruby -v: ruby 2.1.0dev (2013-11-18 trunk 43704) [x86_64-linux] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN =begin Logger continues to write in old log file after rotation as follow: $ cat l.rb require "logger" logdev = "log" pids = [] 2.times do |n| pids << fork{ logger = Logger.new(logdev, 10, 300) 5.times do logger.debug("") sleep(rand * 3) end exit } end pids.each do |pid| Process.waitpid(pid) end $ rm -f log* $ time ruby -v l.rb ruby 2.1.0dev (2013-11-18 trunk 43704) [x86_64-linux] real 0m8.498s user 0m0.044s sys 0m0.016s $ ls -ltrn --full-time log* -rw-r--r-- 1 1000 1000 322 2013-11-20 10:36:40.059247700 +0900 log.1 -rw-r--r-- 1 1000 1000 169 2013-11-20 10:36:41.251247688 +0900 log -rw-r--r-- 1 1000 1000 220 2013-11-20 10:36:43.851247663 +0900 log.0 $ egrep -Tv '^#' log* | sort -k3 log.1 :D, [2013-11-20T10:36:35.983308 #16870] DEBUG -- : log.1 :D, [2013-11-20T10:36:35.983409 #16867] DEBUG -- : log.1 :D, [2013-11-20T10:36:37.194691 #16867] DEBUG -- : log.1 :D, [2013-11-20T10:36:38.242855 #16870] DEBUG -- : log.1 :D, [2013-11-20T10:36:40.062467 #16867] DEBUG -- : log.0 :D, [2013-11-20T10:36:40.347119 #16870] DEBUG -- : log :D, [2013-11-20T10:36:40.953420 #16867] DEBUG -- : log :D, [2013-11-20T10:36:41.257187 #16867] DEBUG -- : log.0 :D, [2013-11-20T10:36:43.145010 #16870] DEBUG -- : log.0 :D, [2013-11-20T10:36:43.856779 #16870] DEBUG -- : =end -- http://bugs.ruby-lang.org/