class Log4r::Outputter
Attributes
Public Class Methods
Retrieve an outputter.
# File lib/log4r/outputter/staticoutputter.rb, line 6 def self.[](name) out = @@outputters[name] if out.nil? return case name when 'stdout' then StdoutOutputter.new 'stdout' when 'stderr' then StderrOutputter.new 'stderr' else nil end end out end
Set an outputter.
# File lib/log4r/outputter/staticoutputter.rb, line 19 def self.[]=(name, outputter) @@outputters[name] = outputter end
Yields each outputter’s name and reference.
# File lib/log4r/outputter/staticoutputter.rb, line 23 def self.each @@outputters.each {|name, outputter| yield name, outputter} end
# File lib/log4r/outputter/staticoutputter.rb, line 26 def self.each_outputter @@outputters.each_value {|outputter| yield outputter} end
An Outputter
needs a name. RootLogger
will be loaded if not already done. The hash arguments are as follows:
:level
-
Logger
level. Optional, defaults to root level :formatter
-
A
Formatter
. Defaults toDefaultFormatter
# File lib/log4r/outputter/outputter.rb, line 28 def initialize(_name, hash={}) super() if _name.nil? raise ArgumentError, "Bad arguments. Name and IO expected.", caller end @name = _name validate_hash(hash) @@outputters[@name] = self end
# File lib/log4r/outputter/staticoutputter.rb, line 17 def self.stderr; Outputter['stderr'] end
# File lib/log4r/outputter/staticoutputter.rb, line 16 def self.stdout; Outputter['stdout'] end
Public Instance Methods
Call flush to force an outputter to write out any buffered log events. Similar to IO#flush, so use in a similar fashion.
# File lib/log4r/outputter/outputter.rb, line 81 def flush end
Dynamically change the formatter. You can just specify a Class object and the formatter will invoke new
or instance
on it as appropriate.
# File lib/log4r/outputter/outputter.rb, line 63 def formatter=(_formatter) if _formatter.kind_of?(Formatter) @formatter = _formatter elsif _formatter.kind_of?(Class) and _formatter <= Formatter if _formatter.respond_to? :instance @formatter = _formatter.instance else @formatter = _formatter.new end else raise TypeError, "Argument was not a Formatter!", caller end Logger.log_internal {"Outputter '#{@name}' using #{@formatter.class}"} end
dynamically change the level
# File lib/log4r/outputter/outputter.rb, line 39 def level=(_level) Log4rTools.validate_level(_level) @level = _level OutputterFactory.create_methods(self) Logger.log_internal {"Outputter '#{@name}' level is #{LNAMES[_level]}"} end
Set the levels to log. All others will be ignored
# File lib/log4r/outputter/outputter.rb, line 47 def only_at(*levels) raise ArgumentError, "Gimme some levels!", caller if levels.empty? raise ArgumentError, "Can't log only_at ALL", caller if levels.include? ALL levels.each {|level| Log4rTools.validate_level(level)} @level = levels.sort.first OutputterFactory.create_methods self, levels Logger.log_internal { "Outputter '#{@name}' writes only on " +\ levels.collect{|l| LNAMES[l]}.join(", ") } end
Protected Instance Methods
Validates the common hash arguments. For now, that would be :level
, :formatter
and the string equivalents
# File lib/log4r/outputter/outputter.rb, line 90 def validate_hash(hash) # default to root level and DefaultFormatter if hash.empty? self.level = Logger.root.level @formatter = DefaultFormatter.new return end self.level = (hash[:level] or hash['level'] or Logger.root.level) self.formatter = (hash[:formatter] or hash['formatter'] or DefaultFormatter.new) end
Private Instance Methods
This method handles all log events passed to a typical Outputter
. Overload this to change the overall behavior of an outputter. Make sure that the new behavior is thread safe.
# File lib/log4r/outputter/outputter.rb, line 109 def canonical_log(logevent) synch { write(format(logevent)) } end
Common method to format data. All it does is call the resident formatter’s format method. If a different formatting behavior is needed, then overload this method.
# File lib/log4r/outputter/outputter.rb, line 117 def format(logevent) # @formatter is guaranteed to be DefaultFormatter if no Formatter # was specified @formatter.format(logevent) end
# File lib/log4r/outputter/outputter.rb, line 130 def synch; synchronize { yield } end
Abstract method to actually write the data to a destination. Custom outputters should overload this to specify how the formatted data should be written and to where.
# File lib/log4r/outputter/outputter.rb, line 127 def write(data) end