class Lumberjack::Formatter
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
.
Public Class Methods
Source
# File lib/lumberjack/formatter.rb, line 18 def initialize @class_formatters = {} @_default_formatter = InspectFormatter.new add(Object, @_default_formatter) add(String, :string) add(Exception, :exception) end
Public Instance Methods
Source
# File lib/lumberjack/formatter.rb, line 45 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: :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}
Source
# File lib/lumberjack/formatter.rb, line 67 def call(severity, timestamp, progname, msg) "#{format(msg)}\n" end
Hack for compatibility with Logger::Formatter
Source
# File lib/lumberjack/formatter.rb, line 62 def format(message) formatter_for(message.class).call(message) end
Format a message object as a string.
Source
# File lib/lumberjack/formatter.rb, line 56 def remove(klass) @class_formatters.delete(klass) self end
Remove the formatter associated with a class. Remove statements can be chained together.