class Log4r::Outputter::OutputterFactory

Log4r creates the logging methods dynamically - quite cleverly creating only those methods that are required, but not that transparent.

To add filter support we ‘monkey patch’ the original implementation of define_log in ‘outputterfactory.rb’ by adding in the filter call. This slows down the run time, but that is not so important.

Public Class Methods

define_log(mname, level, out) click to toggle source

original comment: we need to synch the actual write/format for thread saftyness

# File lib/bio/log/patchlog4r.rb, line 13
def self.define_log(mname, level, out)
  return if mname == 'off' || mname == 'all'
  # p [mname,level,out]
  #
  # At runtime, self and logevent are available to the method:
  # [:self, #<Log4r::StderrOutputter:0x9f8975c @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x9f89694>, @name="stderr", @level=0, @formatter=#<Log4r::DefaultFormatter:0x9f7c174 @depth=7>, @out=#<IO:<STDERR>>>]
  # [:logevent, #<Log4r::LogEvent:0xa198de0 @data="As Developer ERROR should fail", @tracer=nil, @level=4, @name="mylog", @fullname="mylog">]

  mstr = 
      %-
      def out.#{mname}(logevent)
        if self.class.method_defined?(:filtered?) 
          # p logevent
          if !filtered?(logevent.level,nil,logevent.data)
            # p "**** returning nil for "+logevent.data
            return nil
          end
        end
        canonical_log(logevent)
      end
      -
  module_eval mstr
end