Class: Logsly::Logging182::Layout

Inherits:
Object
  • Object
show all
Defined in:
lib/logsly/logging182/layout.rb

Overview

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.

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Layout

call-seq:

Layout.new( :format_as => :string )

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

  • :json => MultiJson.encode(obj)

If the format is not specified then the global object format is used (see Logsly::Logging182#format_as). If the global object format is not specified then :string is used.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/logsly/logging182/layout.rb', line 31

def initialize( opts = {} )
  ::Logsly::Logging182.init unless ::Logsly::Logging182.initialized?

  default = ::Logsly::Logging182.const_defined?('OBJ_FORMAT') ?
            ::Logsly::Logging182::OBJ_FORMAT : nil

  f = opts.getopt(:format_as, default)
  f = f.intern if f.instance_of? String

  @obj_format = case f
                when :inspect, :yaml, :json; f
                else :string end

  b = opts.getopt(:backtrace, ::Logsly::Logging182.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

Instance Method Details

call-seq:

footer

Returns a footer string to be used at the end of a logging appender.



74
# File 'lib/logsly/logging182/layout.rb', line 74

def footer( ) '' end

#format(event) ⇒ Object

call-seq:

format( event )

Returns a string representation of the given logging event. It is up to subclasses to implement this method.



59
# File 'lib/logsly/logging182/layout.rb', line 59

def format( event ) nil end

#format_obj(obj) ⇒ Object

call-seq:

format_obj( obj )

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.



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/logsly/logging182/layout.rb', line 83

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)
           when :json; try_json(obj)
           else obj.to_s end
    str
  end
end

#headerObject

call-seq:

header

Returns a header string to be used at the beginning of a logging appender.



67
# File 'lib/logsly/logging182/layout.rb', line 67

def header( ) '' end

#try_json(obj) ⇒ Object

Attempt to format the given object as a JSON string, but fall back to inspect formatting if JSON encoding fails.

obj - The Object to format.

Returns a String representation of the object.



124
125
126
127
128
# File 'lib/logsly/logging182/layout.rb', line 124

def try_json( obj )
  MultiJson.encode(obj)
rescue StandardError
  obj.inspect
end

#try_yaml(obj) ⇒ Object

Attempt to format the obj using yaml, but fall back to inspect style formatting if yaml fails.

obj - The Object to format.

Returns a String representation of the object.



111
112
113
114
115
# File 'lib/logsly/logging182/layout.rb', line 111

def try_yaml( obj )
  "\n#{obj.to_yaml}"
rescue TypeError
  obj.inspect
end