Project

General

Profile

Actions

Bug #9130

closed

logger continues to write in old log file after rotation

Added by no6v (Nobuhiro IMAI) about 11 years ago. Updated about 11 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.1.0dev (2013-11-18 trunk 43704) [x86_64-linux]
[ruby-core:58442]

Description

=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


Related issues 2 (0 open2 closed)

Related to Ruby master - Bug #9046: [PATCH] Inter-process locking for log rotation is requiredClosed10/23/2013Actions
Has duplicate Ruby master - Bug #9133: logger rotates log files more than expectedClosednobu (Nobuyoshi Nakada)11/21/2013Actions

Updated by no6v (Nobuhiro IMAI) about 11 years ago

=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

Updated by nagachika (Tomoyuki Chikanaga) about 11 years ago

  • Status changed from Open to Assigned
  • Assignee set to naruse (Yui NARUSE)
  • Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN to 1.9.3: DONTNEED, 2.0.0: DONTNEED

This issue seems introduced by r43511. So I assign this to naruse san.

Updated by no6v (Nobuhiro IMAI) about 11 years ago

nagachika (Tomoyuki Chikanaga) wrote:

This issue seems introduced by r43511. So I assign this to naruse san.

No. This bug is what logger.rb has been having for a long time.
The above patch fixes the newly implemented method for simplicity.
The actual problem is #9133. Updated patch is also available there.
Please see to it.

$ ruby -v l.rb
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
$ egrep -Tv '^#' log* | sort -k3
log.1 :D, [2013-12-02T21:19:25.262587 #12207] DEBUG -- :
log.1 :D, [2013-12-02T21:19:25.262713 #12204] DEBUG -- :
log.1 :D, [2013-12-02T21:19:25.577349 #12207] DEBUG -- :
log.1 :D, [2013-12-02T21:19:27.339095 #12204] DEBUG -- :
log.1 :D, [2013-12-02T21:19:27.961317 #12207] DEBUG -- :
log.0 :D, [2013-12-02T21:19:29.225823 #12207] DEBUG -- :
log :D, [2013-12-02T21:19:30.152343 #12204] DEBUG -- :
log.0 :D, [2013-12-02T21:19:31.307252 #12207] DEBUG -- :
log :D, [2013-12-02T21:19:32.378369 #12204] DEBUG -- :
log :D, [2013-12-02T21:19:32.693861 #12204] DEBUG -- :

Updated by nagachika (Tomoyuki Chikanaga) about 11 years ago

Yes, I saw #9133 after I've written the previous comment.
Anyway, this ticket should be opened for trunk. We have to handle these issues separately.

Updated by nagachika (Tomoyuki Chikanaga) about 11 years ago

  • Status changed from Assigned to Closed
  • Assignee changed from naruse (Yui NARUSE) to nobu (Nobuyoshi Nakada)

fixed by r44203.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0