def add(klass, formatter = nil, &block)
      formatter ||= block
      if formatter.is_a?(Symbol)
        formatter_class_name = "#{formatter.to_s.gsub(/(^|_)([a-z])/){|m| $~[2].upcase}}Formatter"
        formatter = Formatter.const_get(formatter_class_name).new
      end
      @class_formatters[klass] = formatter
      self
    end
def add(klass, formatter = nil, &block)
      formatter ||= block
      if formatter.is_a?(Symbol)
        formatter_class_name = "#{formatter.to_s.gsub(/(^|_)([a-z])/){|m| $~[2].upcase}}Formatter"
        formatter = Formatter.const_get(formatter_class_name).new
      end
      @class_formatters[klass] = formatter
      self
    end
Add a formatter for a class. The formatter can be specified as either an object
 that responds to the +call+ method or as a symbol representing one of the predefined
 formatters, or as a block to the method call.

 The predefined formatters are: <tt>:inspect</tt>, <tt>:string</tt>, <tt>:exception</tt>, and <tt>:pretty_print</tt>.

 === Examples

   # Use a predefined formatter
   formatter.add(MyClass, :pretty_print)

   # Pass in a formatter object
   formatter.add(MyClass, Lumberjack::Formatter::PrettyPrintFormatter.new)

   # Use a block
   formatter.add(MyClass){|obj| obj.humanize}

   # Add statements can be chained together
   formatter.add(MyClass, :pretty_print).add(YourClass){|obj| obj.humanize}