Class: Lumberjack::Formatter

Inherits:
Object
  • Object
show all
Defined in:
lib/lumberjack/formatter.rb,
lib/lumberjack/formatter/string_formatter.rb,
lib/lumberjack/formatter/inspect_formatter.rb,
lib/lumberjack/formatter/exception_formatter.rb,
lib/lumberjack/formatter/pretty_print_formatter.rb

Overview

This class controls the conversion of log entry messages into strings. This allows you to log any object you want and have the logging system worry about converting it into a string.

Formats are added to a Formatter by associating them with a class using the add method. Formats are any object that responds to the call method.

By default, all object will be converted to strings using their inspect method except for Strings and Exceptions. Strings are not converted and Exceptions are converted using the ExceptionFormatter.

Defined Under Namespace

Classes: ExceptionFormatter, InspectFormatter, PrettyPrintFormatter, StringFormatter

Instance Method Summary collapse

Constructor Details

#initializeFormatter

Returns a new instance of Formatter.



16
17
18
19
20
21
22
# File 'lib/lumberjack/formatter.rb', line 16

def initialize
  @class_formatters = {}
  @default_formatter = InspectFormatter.new
  add(Object, @default_formatter)
  add(String, :string)
  add(Exception, :exception)
end

Instance Method Details

#add(klass, formatter = nil, &block) ⇒ Object

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: :inspect, :string, :exception, and :pretty_print.

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}


43
44
45
46
47
48
49
50
51
# File 'lib/lumberjack/formatter.rb', line 43

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

#format(message) ⇒ Object

Format a message object as a string.



60
61
62
# File 'lib/lumberjack/formatter.rb', line 60

def format(message)
  formatter_for(message.class).call(message)
end

#remove(klass) ⇒ Object

Remove the formatter associated with a class. Remove statements can be chained together.



54
55
56
57
# File 'lib/lumberjack/formatter.rb', line 54

def remove(klass)
  @class_formatters.delete(klass)
  self
end