Class: Woods::Observability::StructuredLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/woods/observability/structured_logger.rb

Overview

Structured JSON logger that writes one JSON object per line.

Each log entry includes a timestamp, level, event name, and any additional data passed as keyword arguments.

Examples:

logger = StructuredLogger.new(output: $stderr)
logger.info('extraction.complete', units: 42, duration_ms: 1200)
# => {"timestamp":"2026-02-15T12:00:00Z","level":"info",
#     "event":"extraction.complete","units":42,"duration_ms":1200}

Instance Method Summary collapse

Constructor Details

#initialize(output: $stderr) ⇒ StructuredLogger

Returns a new instance of StructuredLogger.

Parameters:

  • output (IO) (defaults to: $stderr)

    Output stream (default: $stderr)



21
22
23
# File 'lib/woods/observability/structured_logger.rb', line 21

def initialize(output: $stderr)
  @output = output
end

Instance Method Details

#debug(event, **data) ⇒ Object

Log at debug level.



35
36
37
# File 'lib/woods/observability/structured_logger.rb', line 35

%w[info warn error debug].each do |level|
  define_method(level) { |event, **data| write_entry(level, event, data) }
end

#error(event, **data) ⇒ Object

Log at error level.



35
36
37
# File 'lib/woods/observability/structured_logger.rb', line 35

%w[info warn error debug].each do |level|
  define_method(level) { |event, **data| write_entry(level, event, data) }
end

#info(event, **data) ⇒ Object

Log at info level.

Parameters:

  • event (String)

    Event name

  • data (Hash)

    Additional structured data



35
36
37
# File 'lib/woods/observability/structured_logger.rb', line 35

%w[info warn error debug].each do |level|
  define_method(level) { |event, **data| write_entry(level, event, data) }
end

#warn(event, **data) ⇒ Object

Log at warn level.



35
36
37
# File 'lib/woods/observability/structured_logger.rb', line 35

%w[info warn error debug].each do |level|
  define_method(level) { |event, **data| write_entry(level, event, data) }
end