Class: Igniter::Store::ServerLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/igniter/store/server_logger.rb

Overview

Thread-safe structured logger for StoreServer.

Each line is written as:

[2026-04-30T12:34:56.789] INFO  message

Structured events are written as:

[EVENT] {"event":"server_start","ts":"2026-04-30T12:34:56.789Z",...}

Pass log_io: nil to silence all output (useful in tests).

Constant Summary collapse

LEVELS =
{ debug: 0, info: 1, warn: 2, error: 3 }.freeze

Instance Method Summary collapse

Constructor Details

#initialize(io = $stdout, level = :info) ⇒ ServerLogger

Returns a new instance of ServerLogger.



20
21
22
23
24
# File 'lib/igniter/store/server_logger.rb', line 20

def initialize(io = $stdout, level = :info)
  @io    = io
  @min   = LEVELS.fetch(level, 1)
  @mutex = Mutex.new
end

Instance Method Details

#debug(msg) ⇒ Object



26
# File 'lib/igniter/store/server_logger.rb', line 26

def debug(msg) = log(:debug, msg)

#error(msg) ⇒ Object



29
# File 'lib/igniter/store/server_logger.rb', line 29

def error(msg) = log(:error, msg)

#event(type, level: :info, **attrs) ⇒ Object

Emits a structured JSON event line:

[EVENT] {"event":"connection_open","ts":"...","connection_id":"..."}

level: controls the minimum log level for this event (default :info). Pass level: :debug for high-frequency per-request events.



36
37
38
39
40
41
42
43
44
# File 'lib/igniter/store/server_logger.rb', line 36

def event(type, level: :info, **attrs)
  return if LEVELS.fetch(level, 1) < @min
  return unless @io

  payload = { event: type, ts: Time.now.iso8601(3) }.merge(attrs)
  @mutex.synchronize { @io.write("[EVENT] #{JSON.generate(payload)}\n") }
rescue IOError, JSON::GeneratorError
  nil
end

#info(msg) ⇒ Object



27
# File 'lib/igniter/store/server_logger.rb', line 27

def info(msg)  = log(:info,  msg)

#levelObject



46
47
48
# File 'lib/igniter/store/server_logger.rb', line 46

def level
  LEVELS.key(@min)
end

#warn(msg) ⇒ Object



28
# File 'lib/igniter/store/server_logger.rb', line 28

def warn(msg)  = log(:warn,  msg)