Class: JsonLogger

Inherits:
Logger
  • Object
show all
Defined in:
lib/json_logger.rb

Constant Summary collapse

@@factory_defaults =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ JsonLogger

Returns a new instance of JsonLogger.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/json_logger.rb', line 27

def initialize(*args)
  super

  self.formatter = proc { |severity, datetime, progname, raw|
    out = {
      'time' => datetime.utc.iso8601(3),
      'level' => severity,
      'level_id' => @levels[severity]
    }

    if self.presets
      out.merge!(self.presets)
    end

    if raw.respond_to?(:to_hash)
      #TODO: raise error if raw has a key which overrides time, level, or level_id?
      out.merge!(raw.to_hash)
    elsif raw.respond_to?(:to_s)
      out['msg'] = raw.to_s
    end

    out['progname'] = progname if progname

    out.to_json + "\n"
  }

  @levels = {}
  Logger::SEV_LABEL.each_with_index {|label,idx| @levels[label] = idx}
end

Instance Attribute Details

#presetsObject

Returns the value of attribute presets.



25
26
27
# File 'lib/json_logger.rb', line 25

def presets
  @presets
end

Class Method Details

.factory(options = {}) ⇒ Object

return a new JsonLogger

- file is set in settings
- progname and level can be set by options. (default level is in settings)


15
16
17
18
19
20
21
22
23
# File 'lib/json_logger.rb', line 15

def self.factory(options={})
  device = options[:device] || @@factory_defaults[:device]
  inst = new(device)

  inst.level = options[:level] || @@factory_defaults[:level] || Logger::WARN
  inst.progname = options[:progname] || @@factory_defaults[:progname]
  inst.presets = options[:presets]
  inst
end

.factory_defaults=(options) ⇒ Object



8
9
10
# File 'lib/json_logger.rb', line 8

def self.factory_defaults=(options)
  @@factory_defaults = options
end