# File lib/logging/appenders/rolling_file.rb, line 69
    def initialize( name, opts = {} )
      # raise an error if a filename was not given
      @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)

      # grab our options
      @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)

      # setup the file roller
      @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

      # if the truncate flag was set to true, then roll
      roll_now = opts.getopt(:truncate, false)
      if roll_now
        copy_truncate
        @roller.roll_files
      end
    end