Project

General

Profile

Bug #12948

Updated by tsukasa.oishi (Tsukasa Oishi) over 7 years ago

Logger shift_age is "daily". 
 "log" file's timestamp is yesterday or earlier. 

 Logger does not rotate the file. 
 Ruby version is 2.1 or older, Logger rotates the file. 

 ~~~ruby 
 require 'time' 
 require 'logger' 

 File.open("log", "w") {} 
 File.utime(*[Time.mktime(2016, 1, 1)]*2, "log") 
 logger = Logger.new("log", "daily") 
 logger.info "test" 
 logger.close 
 p Dir.glob("log*") 

 ~~~ 

 Ruby2.2 or newer 

 ~~~ 
 ["log"] 

 ~~~ 

 Ruby2.1 or older 

 ~~~ 
 ["log.20161115", "log"] 

 ~~~ 
 (Today is 2016-11-16) 


 #### 補足 

 workerのような、必要に応じて都度起動するrubyスクリプト内で、Loggerをshift_age "monthly" で使用しています。 
 Rubyのバージョンを2.2系にあげたタイミングでログがローテーションされなくなってしまいました。 
 Loggerオブジェクトを生成した時刻が、ローテートタイミングを決める基準になっているのが原因です。 Loggerを起動した時刻が、ローテートタイミングを決める基準になっているのが原因です。 
 頻繁に起動してはすぐに死ぬプロセスだと、プロセスが生きている間にたまたまタイミングがこない限りローテーションされません。 

Back