Class: Betterlog::Log
- Inherits:
-
Object
- Object
- Betterlog::Log
- 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
- #context(data_hash) ⇒ Object
-
#debug(object, **rest) ⇒ Log
Logs a message on severity debug.
- #emit(event) ⇒ Object
-
#error(object, **rest) ⇒ Log
Logs a message on severity error.
-
#fatal(object, **rest) ⇒ Log
Logs a message on severity fatal.
-
#info(object, **rest) ⇒ Log
Logs a message on severity info.
- #logger ⇒ Object
-
#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.
-
#output(object, **rest) ⇒ Log
Logs a message on severity debug, by default, this can be changed by passing the severity: keyword.
-
#warn(object, **rest) ⇒ Log
Logs a message on severity warn.
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.
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.
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.
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.
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 |
#logger ⇒ Object
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.
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 |