def initialize( opts={} )
opts = convert_keys_to_symbols( opts )
bad = opts.keys - VALID_OPTIONS
raise ArgumentError,
"invalid option(s) to LogFactory (#{bad.inspect})" unless bad.empty?
if opts[:device]
@device = opts[:device]
else
filename = opts[:filename] || DEFAULT_LOG_FILENAME
roll_age = opts[:roll_age ] || opts[:roll_frequency] || 0
roll_size = opts[:roll_size] || 0
@device = Logger::LogDevice.new( filename,
:shift_age=>roll_age, :shift_size=>roll_size )
end
@default_date_format = opts[:default_date_format]
@default_message_format = opts[:default_message_format] ||
DEFAULT_MESSAGE_FORMAT
@default_level = opts[:default_level]
if @default_level.is_a?( String ) || @default_level.is_a?( Symbol )
@default_level = LEVEL_TRANSLATOR[@default_level.to_s.upcase]
if @default_level.nil?
raise ArgumentError,
"invalid logging level (#{@default_level.inspect})"
end
end
@levels = Hash.new :level => nil, :date_format => nil,
:message_format => nil
( opts[:levels] || {} ).each_pair do |key, value|
key = Regexp.new( "^" + key.gsub( /\./, "\\." ).gsub( /\*/, ".*" ) )
if value.is_a?( String ) || value.is_a?( Symbol )
value = { :level => value.to_s }
else
value = convert_keys_to_symbols( value )
end
bad = value.keys - VALID_LEVEL_OPTIONS
raise ArgumentError,
"invalid log level option(s) #{bad.inspect}" unless bad.empty?
value[ :level ] = LEVEL_TRANSLATOR[ value[:level].to_s.upcase ]
if value[:level].nil?
raise ArgumentError,
"invalid logging level (#{value[:level].inspect})"
end
@levels[ key ] = value
end
@loggers = Hash.new
@mutex = Mutex.new
@closed = false
end