Class: Betterlog::Log

Inherits:
Object
  • Object
show all
Extended by:
ComplexConfig::Provider::Shortcuts
Includes:
Tins::SexySingleton
Defined in:
lib/betterlog/log.rb,
lib/betterlog/log/event.rb,
lib/betterlog/log/severity.rb,
lib/betterlog/log/event_formatter.rb

Defined Under Namespace

Classes: Event, EventFormatter, Severity

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.context(data_hash) ⇒ Object



128
129
130
# File 'lib/betterlog/log.rb', line 128

def self.context(data_hash)
  instance.context(data_hash)
end

Instance Method Details

#context(data_hash) ⇒ Object



123
124
125
126
# File 'lib/betterlog/log.rb', line 123

def context(data_hash)
  GlobalMetadata.add data_hash
  self
end

#debug(object, **rest) ⇒ Log

Logs a message on severity debug.

Parameters:

  • object

    this object is logged

  • **rest

    additional data is logged as well.

Returns:

  • (Log)

    this object itself.



49
50
51
52
53
# File 'lib/betterlog/log.rb', line 49

def debug(object, **rest)
  protect do
    emit Log::Event.ify(object, severity: __method__, rest: rest)
  end
end

#emit(event) ⇒ Object



132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/betterlog/log.rb', line 132

def emit(event)
  l = caller_locations.reverse_each.each_cons(3).find { |c, n1, n2|
    n2.absolute_path =~ /betterlog\/log\.rb/ and break c # TODO check if this still works
  }
  if l
    event[:location] = [ l.absolute_path, l.lineno ] * ?:
  end
  event[:emitter] = self.class.name.downcase
  notify(event)
  logger.send(event.severity.to_sym, JSON.generate(event))
  self
ensure
  GlobalMetadata.data.clear
end

#error(object, **rest) ⇒ Log

Logs a message on severity error.

Parameters:

  • object

    this object is logged

  • **rest

    additional data is logged as well.

Returns:

  • (Log)

    this object itself.



60
61
62
63
64
# File 'lib/betterlog/log.rb', line 60

def error(object, **rest)
  protect do
    emit Log::Event.ify(object, severity: __method__, rest: rest)
  end
end

#fatal(object, **rest) ⇒ Log

Logs a message on severity fatal.

Parameters:

  • object

    this object is logged

  • **rest

    additional data is logged as well.

Returns:

  • (Log)

    this object itself.



71
72
73
74
75
# File 'lib/betterlog/log.rb', line 71

def fatal(object, **rest)
  protect do
    emit Log::Event.ify(object, severity: __method__, rest: rest)
  end
end

#info(object, **rest) ⇒ Log

Logs a message on severity info.

Parameters:

  • object

    this object is logged

  • **rest

    additional data is logged as well.

Returns:

  • (Log)

    this object itself.



27
28
29
30
31
# File 'lib/betterlog/log.rb', line 27

def info(object, **rest)
  protect do
    emit Log::Event.ify(object, severity: __method__, rest: rest)
  end
end

#loggerObject



18
19
20
# File 'lib/betterlog/log.rb', line 18

def logger
  defined?(Rails) && Rails.respond_to?(:logger) ? Rails.logger : self.class.default_logger
end

#metric(name:, value: nil, success: -> result { true }, **rest, &block) ⇒ Log

Logs a metric on severity debug, by default, this can be changed by passing the severity: keyword. name is for example ‘Donation.Confirmation’ and value can be any value, but has to be somewhat consistent in terms of structure with name to allow for correct evaluation.

Parameters:

  • name

    the name of the recorded metric.

  • value (defaults to: nil)

    of the recorded metric, defaults to duration if block was given.

  • success (defaults to: -> result { true })

    a Proc with parameter result that returns true iff block result was asuccessful

  • **rest

    additional rest is logged as well.

Returns:

  • (Log)

    this object itself.



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/betterlog/log.rb', line 101

def metric(name:, value: nil, success: -> result { true }, **rest, &block)
  result = time_block(&block)
rescue => error
  e = Log::Event.ify(error)
  rest |= e.as_json.subhash(:error_class, :backtrace, :message)
  rest[:message] = "#{rest[:message].inspect} while measuring metric #{name}"
  raise error
ensure
  protect do
    if timed_duration
      rest[:duration] = timed_duration
    end
    event = build_metric(
      name:     name,
      value:    value || timed_duration,
      success: success.(result),
      **rest
    )
    emit event
  end
end

#output(object, **rest) ⇒ Log

Logs a message on severity debug, by default, this can be changed by passing the severity: keyword.

Parameters:

  • object

    this object is logged

  • **rest

    additional data is logged as well.

Returns:

  • (Log)

    this object itself.



83
84
85
86
87
# File 'lib/betterlog/log.rb', line 83

def output(object, **rest)
  protect do
    emit Log::Event.ify(object, severity: rest[:severity], rest: rest)
  end
end

#warn(object, **rest) ⇒ Log

Logs a message on severity warn.

Parameters:

  • object

    this object is logged

  • **rest

    additional data is logged as well.

Returns:

  • (Log)

    this object itself.



38
39
40
41
42
# File 'lib/betterlog/log.rb', line 38

def warn(object, **rest)
  protect do
    emit Log::Event.ify(object, severity: __method__, rest: rest)
  end
end