Class: Dinie::Internal::RuntimeLogger
- Inherits:
-
Object
- Object
- Dinie::Internal::RuntimeLogger
- Defined in:
- lib/dinie/runtime/logger.rb
Overview
Leveled logging facade with PII redaction (architecture §9, RB12). Owns the effective level (resolved once) and an injectable sink; gates every call and routes request/response detail through LogRedaction before emitting. Constructed by Middleware::Logging from the ‘log_level:` / `logger:` the Client captured.
Defaults to ‘:off` — a financial SDK emits nothing unless the caller opts in. Mirrors the leveling/redaction approach of the TS `RuntimeLogger`; the divergence is the **hook point** (TS owns a custom logger instance; Ruby fills the OpenAI-Ruby gap with a Faraday middleware —the `comparison.md` axis).
Constant Summary collapse
- LEVELS =
Level ordering for gating: a call at ‘level` emits when `level <= configured` (so `:off` emits nothing, `:debug` emits everything).
{ off: 0, error: 1, warn: 2, info: 3, debug: 4 }.freeze
- ENV_VAR =
Environment variable read when no explicit ‘level:` is given.
"DINIE_LOG"
Instance Attribute Summary collapse
-
#level ⇒ Symbol
readonly
The effective level after ‘level:` + `DINIE_LOG` resolution.
Instance Method Summary collapse
- #debug(message) ⇒ void
-
#enabled?(level) ⇒ Boolean
Whether a call at ‘level` would emit under the configured level.
- #error(message) ⇒ void
- #info(message) ⇒ void
-
#initialize(level: nil, logger: nil, env: ENV.fetch(ENV_VAR, nil)) ⇒ RuntimeLogger
constructor
A new instance of RuntimeLogger.
-
#log_request(method:, url:, headers:, body:, correlation:) ⇒ void
Log an outgoing request at ‘debug` with redacted headers + body and the correlation triple.
-
#log_response(status:, url:, headers:, body:, duration_ms:, request_id:, correlation:) ⇒ void
Log an incoming response at ‘debug` with redacted headers + body, duration, and request id.
- #warn(message) ⇒ void
Constructor Details
#initialize(level: nil, logger: nil, env: ENV.fetch(ENV_VAR, nil)) ⇒ RuntimeLogger
Returns a new instance of RuntimeLogger.
162 163 164 165 |
# File 'lib/dinie/runtime/logger.rb', line 162 def initialize(level: nil, logger: nil, env: ENV.fetch(ENV_VAR, nil)) @level = resolve_level(level, env) @sink = logger || ::Logger.new($stdout) end |
Instance Attribute Details
#level ⇒ Symbol (readonly)
The effective level after ‘level:` + `DINIE_LOG` resolution.
156 157 158 |
# File 'lib/dinie/runtime/logger.rb', line 156 def level @level end |
Instance Method Details
#debug(message) ⇒ void
This method returns an undefined value.
182 |
# File 'lib/dinie/runtime/logger.rb', line 182 def debug() = emit(:debug, ) |
#enabled?(level) ⇒ Boolean
Whether a call at ‘level` would emit under the configured level.
171 172 173 |
# File 'lib/dinie/runtime/logger.rb', line 171 def enabled?(level) LEVELS.fetch(level) <= LEVELS.fetch(@level) end |
#error(message) ⇒ void
This method returns an undefined value.
176 177 |
# File 'lib/dinie/runtime/logger.rb', line 176 def error() = emit(:error, ) # @return [void] |
#info(message) ⇒ void
This method returns an undefined value.
180 181 |
# File 'lib/dinie/runtime/logger.rb', line 180 def info() = emit(:info, ) # @return [void] |
#log_request(method:, url:, headers:, body:, correlation:) ⇒ void
This method returns an undefined value.
Log an outgoing request at ‘debug` with redacted headers + body and the correlation triple.
192 193 194 195 196 |
# File 'lib/dinie/runtime/logger.rb', line 192 def log_request(method:, url:, headers:, body:, correlation:) return unless enabled?(:debug) emit_line("→ request", correlation.merge(method: method.to_s.upcase, url: url), headers, body) end |
#log_response(status:, url:, headers:, body:, duration_ms:, request_id:, correlation:) ⇒ void
This method returns an undefined value.
Log an incoming response at ‘debug` with redacted headers + body, duration, and request id.
208 209 210 211 212 213 |
# File 'lib/dinie/runtime/logger.rb', line 208 def log_response(status:, url:, headers:, body:, duration_ms:, request_id:, correlation:) # rubocop:disable Metrics/ParameterLists return unless enabled?(:debug) fields = correlation.merge(status: status, url: url, duration_ms: duration_ms, request_id: request_id) emit_line("← response", fields, headers, body) end |
#warn(message) ⇒ void
This method returns an undefined value.
178 179 |
# File 'lib/dinie/runtime/logger.rb', line 178 def warn() = emit(:warn, ) # @return [void] |