Class: Omnitrack::Logger

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

Overview

Structured JSON logger that writes to a dedicated omnitrack.log file. All public methods are thread-safe (delegating to Ruby’s stdlib Logger).

Constant Summary collapse

SEVERITY_MAP =
{
  debug: ::Logger::DEBUG,
  info:  ::Logger::INFO,
  warn:  ::Logger::WARN,
  error: ::Logger::ERROR,
  none:  ::Logger::UNKNOWN
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(log_file:, log_level: :info) ⇒ Logger

Returns a new instance of Logger.



19
20
21
22
23
24
# File 'lib/omnitrack/logger.rb', line 19

def initialize(log_file:, log_level: :info)
  @level    = log_level.to_sym
  @log_file = log_file
  @backend  = build_backend(log_file)
  apply_level!
end

Instance Method Details

#debug(message, **context) ⇒ Object


Public logging API




30
31
32
# File 'lib/omnitrack/logger.rb', line 30

def debug(message, **context)
  write(:debug, message, context)
end

#error(message, **context) ⇒ Object



42
43
44
# File 'lib/omnitrack/logger.rb', line 42

def error(message, **context)
  write(:error, message, context)
end

#info(message, **context) ⇒ Object



34
35
36
# File 'lib/omnitrack/logger.rb', line 34

def info(message, **context)
  write(:info, message, context)
end

#log_error(adapter:, event:, error:, attempt: nil) ⇒ Object

Convenience: log an adapter error



65
66
67
68
69
70
71
72
73
# File 'lib/omnitrack/logger.rb', line 65

def log_error(adapter:, event:, error:, attempt: nil)
  error("adapter.error",
        adapter:   adapter,
        event:     event,
        error:     error.class.name,
        message:   error.message,
        attempt:   attempt,
        backtrace: error.backtrace&.first(5))
end

#log_request(adapter:, event:, payload: {}) ⇒ Object

Convenience: log an adapter request



47
48
49
50
51
52
# File 'lib/omnitrack/logger.rb', line 47

def log_request(adapter:, event:, payload: {})
  info("adapter.request",
       adapter: adapter,
       event:   event,
       payload: payload)
end

#log_response(adapter:, event:, status:, body: nil, duration_ms: nil) ⇒ Object

Convenience: log an adapter response



55
56
57
58
59
60
61
62
# File 'lib/omnitrack/logger.rb', line 55

def log_response(adapter:, event:, status:, body: nil, duration_ms: nil)
  info("adapter.response",
       adapter:     adapter,
       event:       event,
       status:      status,
       body:        body,
       duration_ms: duration_ms)
end

#reopenObject

Re-open the log file (useful after logrotate)



76
77
78
# File 'lib/omnitrack/logger.rb', line 76

def reopen
  @backend.reopen(@log_file)
end

#warn(message, **context) ⇒ Object



38
39
40
# File 'lib/omnitrack/logger.rb', line 38

def warn(message, **context)
  write(:warn, message, context)
end