def add( lvl, data = nil, progname = nil )
      lvl = Integer(lvl)
      return false if lvl < level

      if data.nil?
        if block_given?
          data = yield
        else
          data = progname
        end
      end

      log_event(::Logging::LogEvent.new(@name, lvl, data, @caller_tracing))
      true
    end
def add( lvl, data = nil, progname = nil )
      lvl = Integer(lvl)
      return false if lvl < level

      if data.nil?
        if block_given?
          data = yield
        else
          data = progname
        end
      end

      log_event(::Logging::LogEvent.new(@name, lvl, data, @caller_tracing))
      true
    end
call-seq:
    add( severity, message = nil ) {block}

 Log a message if the given severity is high enough.  This is the generic
 logging method.  Users will be more inclined to use #debug, #info, #warn,
 #error, and #fatal.

 <b>Message format</b>: +message+ can be any object, but it has to be
 converted to a String in order to log it. The Logging::format_as
 method is used to determine how objects chould be converted to
 strings. Generally, +inspect+ is used.

 A special case is an +Exception+ object, which will be printed in
 detail, including message, class, and backtrace.

 If a _message_ is not given, then the return value from the block is
 used as the message to log. This is useful when creating the actual
 message is an expensive operation. This allows the logger to check the
 severity against the configured level before actually constructing the
 message.

 This method returns +true+ if the message was logged, and +false+ is
 returned if the message was not logged.