Class: MrLogaLoga::Logger
- Inherits:
-
Logger
- Object
- Logger
- MrLogaLoga::Logger
- Defined in:
- lib/mr_loga_loga/logger.rb
Overview
Description
This class extends the default Ruby Logger to allow users to attach contextual information to log messages.
Example
This creates a Logger that outputs to the standard output stream, with a level of WARN
:
require 'mr_loga_loga'
logger = MrLogaLoga::Logger.new(STDOUT)
logger.level = Logger::WARN
logger.debug("Default")
logger.context(user: 1).debug('with context')
Instance Method Summary collapse
-
#add(severity, message = nil, context = nil, progname = nil, &block) ⇒ Object
(also: #log)
Adds a new log message with the given severity.
-
#context(context = {}, &block) ⇒ Object
Generates a new context.
-
#initialize(*args, **kwargs) ⇒ Logger
constructor
A new instance of Logger.
- #log?(severity) ⇒ Boolean
- #method_missing(symbol, *args, &block) ⇒ Object
- #respond_to_missing?(name, include_private = false) ⇒ Boolean
- #super_add ⇒ Object
-
#write(severity, *args, &block) ⇒ Object
Write the actual log data.
Constructor Details
#initialize(*args, **kwargs) ⇒ Logger
Returns a new instance of Logger.
26 27 28 29 |
# File 'lib/mr_loga_loga/logger.rb', line 26 def initialize(*args, **kwargs) super @default_formatter = MrLogaLoga::Formatters::KeyValue.new end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
Instance Method Details
#add(severity, message = nil, context = nil, progname = nil, &block) ⇒ Object Also known as: log
Adds a new log message with the given severity
38 39 40 |
# File 'lib/mr_loga_loga/logger.rb', line 38 def add(severity, = nil, context = nil, progname = nil, &block) write(severity, , context, progname, &block) end |
#context(context = {}, &block) ⇒ Object
Generates a new context
32 33 34 35 |
# File 'lib/mr_loga_loga/logger.rb', line 32 def context(context = {}, &block) result = block ? -> { context.merge(block.call) } : context Context.new(self, result) end |
#log?(severity) ⇒ Boolean
79 80 81 |
# File 'lib/mr_loga_loga/logger.rb', line 79 def log?(severity) !@logdev.nil? && severity >= level end |
#respond_to_missing?(name, include_private = false) ⇒ Boolean
75 76 77 |
# File 'lib/mr_loga_loga/logger.rb', line 75 def respond_to_missing?(name, include_private = false) super(name, include_private) end |
#super_add ⇒ Object
24 |
# File 'lib/mr_loga_loga/logger.rb', line 24 alias super_add add |
#write(severity, *args, &block) ⇒ Object
Write the actual log data
This method needs to be used rather than add as various gems (Rails, Sidekiq) patch loggers to overwrite add. The patches’ signatures do not match our add method, so we use this method to do the actual logging in helper methods like debug, info etc.
48 49 50 51 52 53 54 55 56 |
# File 'lib/mr_loga_loga/logger.rb', line 48 def write(severity, *args, &block) severity ||= UNKNOWN return true unless log?(severity) , context, progname = args = .is_a?(LogMessage) ? : LogMessage.new(*LoggerData.build(, context, &block)) super_add(severity, , progname) end |