Bug #12948
Updated by tsukasa.oishi (Tsukasa Oishi) about 9 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を起動した時刻が、ローテートタイミングを決める基準になっているのが原因です。
頻繁に起動してはすぐに死ぬプロセスだと、プロセスが生きている間にたまたまタイミングがこない限りローテーションされません。