Class: Whatsapp::WLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/whatsapp/logger.rb

Overview

Structured logger with key-value context support.

Wraps Ruby's standard +Logger+ and adds structured context formatting.

Examples:

logger = Whatsapp::WLogger.new($stdout, level: :debug)
logger.info "Message sent", to: "+33612345678", id: "abc123"
# => [whatsapp-ruby] [14:30:00] Message sent to="+33612345678" id="abc123"

Constant Summary collapse

LEVELS =

Available log levels.

%i[debug info warn error fatal].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(output = $stdout, level: :info) ⇒ WLogger

Returns a new instance of WLogger.

Parameters:

  • output (String, IO, Logger, nil) (defaults to: $stdout)

    log destination (path, IO, Logger, or nil for /dev/null)

  • level (Symbol) (defaults to: :info)

    initial log level (see LEVELS)



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/whatsapp/logger.rb', line 22

def initialize(output = $stdout, level: :info)
  @external = false
  @backend = if output.nil?
    ::Logger.new(File::NULL)
  elsif output.is_a?(::Logger)
    output
  elsif output.respond_to?(:info) && output.respond_to?(:debug)
    @external = true
    output
  else
    ::Logger.new(output)
  end

  unless @external
    @backend.level = LEVELS.index(level) || ::Logger::INFO
    @backend.formatter = method(:format_message)
  end
end

Instance Attribute Details

#backendLogger (readonly)

Returns the underlying Ruby Logger instance.

Returns:

  • (Logger)

    the underlying Ruby Logger instance



18
19
20
# File 'lib/whatsapp/logger.rb', line 18

def backend
  @backend
end

Instance Method Details

#level=(lvl) ⇒ void

This method returns an undefined value.

Set the log level.

Parameters:

  • lvl (Symbol, Integer)

    log level



56
57
58
# File 'lib/whatsapp/logger.rb', line 56

def level=(lvl)
  @backend.level = LEVELS.index(lvl) || lvl unless @external
end