The Layout
class provides methods for formatting log events
into a string representation. Layouts are used
by Appenders to format log events before
writing them to the logging destination.
All other Layouts inherit from this class which
provides stub methods. Each subclass should provide a format
method. A layout can be used by more than one Appender
so all
the methods need to be thread safe.
Creates a new layout that will format objects as strings using the given
:format_as
style. This can be one of :string
,
:inspect
, or :yaml
. These formatting commands map
to the following object methods:
:string => to_s
:inspect => inspect
:yaml => to_yaml
If the format is not specified then the global object format is used (see
Logging#format_as). If the global object format is not specified then
:string
is used.
# File lib/logging/layout.rb, line 30 def initialize( opts = {} ) ::Logging.init unless ::Logging.const_defined? :MAX_LEVEL_LENGTH default = ::Logging.const_defined?('OBJ_FORMAT') ? ::Logging::OBJ_FORMAT : nil f = opts.getopt(:format_as, default) f = f.intern if f.instance_of? String @obj_format = case f when :inspect, :yaml; f else :string end b = opts.getopt(:backtrace, ::Logging.backtrace) @backtrace = case b when :on, 'on', true; true when :off, 'off', false; false else raise ArgumentError, "backtrace must be true or false" end end
Returns a string representation of the given logging event. It is up to subclasses to implement this method.
# File lib/logging/layout.rb, line 58 def format( event ) nil end
Return a string representation of the given object. Depending upon the
configuration of the logger system the format will be an
inspect
based representation or a yaml
based
representation.
# File lib/logging/layout.rb, line 82 def format_obj( obj ) case obj when String; obj when Exception str = "<#{obj.class.name}> #{obj.message}" if @backtrace && !obj.backtrace.nil? str << "\n\t" << obj.backtrace.join("\n\t") end str when nil; "<#{obj.class.name}> nil" else str = "<#{obj.class.name}> " str << case @obj_format when :inspect; obj.inspect when :yaml; try_yaml(obj) else obj.to_s end str end end
Returns a header string to be used at the beginning of a logging appender.
# File lib/logging/layout.rb, line 66 def header( ) '' end
Attempt to format the obj using yaml, but fall back to inspect style formatting if yaml fails.
# File lib/logging/layout.rb, line 108 def try_yaml( obj ) "\n#{obj.to_yaml}" rescue TypeError obj.inspect end