def initialize( name, opts = {} )
@fn = opts.getopt(:filename, name)
@fn_copy = @fn + '._copy_'
raise ArgumentError, 'no filename was given' if @fn.nil?
::Logging::Appenders::File.assert_valid_logfile(@fn)
@size = opts.getopt(:size, :as => Integer)
code = 'def sufficiently_aged?() false end'
@age_fn = @fn + '.age'
@age_fn_mtime = nil
case @age = opts.getopt(:age)
when 'daily'
code = "def sufficiently_aged?\n@age_fn_mtime ||= ::File.mtime(@age_fn)\nnow = Time.now\nif (now.day != @age_fn_mtime.day) or (now - @age_fn_mtime) > 86400\nreturn true\nend\nfalse\nend\n"
when 'weekly'
code = "def sufficiently_aged?\n@age_fn_mtime ||= ::File.mtime(@age_fn)\nif (Time.now - @age_fn_mtime) > 604800\nreturn true\nend\nfalse\nend\n"
when 'monthly'
code = "def sufficiently_aged?\n@age_fn_mtime ||= ::File.mtime(@age_fn)\nnow = Time.now\nif (now.month != @age_fn_mtime.month) or (now - @age_fn_mtime) > 2678400\nreturn true\nend\nfalse\nend\n"
when Integer, String
@age = Integer(@age)
code = "def sufficiently_aged?\n@age_fn_mtime ||= ::File.mtime(@age_fn)\nif (Time.now - @age_fn_mtime) > @age\nreturn true\nend\nfalse\nend\n"
end
FileUtils.touch(@age_fn) if @age and !test(?f, @age_fn)
meta = class << self; self end
meta.class_eval code, __FILE__, __LINE__
super(name, ::File.new(@fn, 'a'), opts)
@roller =
case opts.getopt(:roll_by)
when 'number'; NumberedRoller.new(@fn, opts)
when 'date'; DateRoller.new(@fn, opts)
else
(@age and !@size) ?
DateRoller.new(@fn, opts) :
NumberedRoller.new(@fn, opts)
end
roll_now = opts.getopt(:truncate, false)
if roll_now
copy_truncate
@roller.roll_files
end
end