Class: Logsly::Logging182::Layout
- Inherits:
-
Object
- Object
- Logsly::Logging182::Layout
- 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.
Direct Known Subclasses
Logsly::Logging182::Layouts::Basic, Logsly::Logging182::Layouts::Parseable, Logsly::Logging182::Layouts::Pattern
Instance Method Summary collapse
-
#footer ⇒ Object
call-seq: footer.
-
#format(event) ⇒ Object
call-seq: format( event ).
-
#format_obj(obj) ⇒ Object
call-seq: format_obj( obj ).
-
#header ⇒ Object
call-seq: header.
-
#initialize(opts = {}) ⇒ Layout
constructor
call-seq: Layout.new( :format_as => :string ).
-
#try_json(obj) ⇒ Object
Attempt to format the given object as a JSON string, but fall back to inspect formatting if JSON encoding fails.
-
#try_yaml(obj) ⇒ Object
Attempt to format the obj using yaml, but fall back to inspect style formatting if yaml fails.
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
#footer ⇒ Object
call-seq:
Returns a footer string to be used at the end of a logging appender.
74 |
# File 'lib/logsly/logging182/layout.rb', line 74 def ( ) '' 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.}" 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 |
#header ⇒ Object
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 |