Class: Igniter::Store::ServerLogger
- Inherits:
-
Object
- Object
- Igniter::Store::ServerLogger
- 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
- #debug(msg) ⇒ Object
- #error(msg) ⇒ Object
-
#event(type, level: :info, **attrs) ⇒ Object
Emits a structured JSON event line: [EVENT] “event”:“connection_open”,“ts”:“…”,“connection_id”:“…”.
- #info(msg) ⇒ Object
-
#initialize(io = $stdout, level = :info) ⇒ ServerLogger
constructor
A new instance of ServerLogger.
- #level ⇒ Object
- #warn(msg) ⇒ Object
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) |
#level ⇒ Object
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) |