Class: BetterAuth::Telemetry::LoggerAdapter
- Inherits:
-
Object
- Object
- BetterAuth::Telemetry::LoggerAdapter
- Defined in:
- lib/better_auth/telemetry/logger_adapter.rb
Overview
Thin wrapper that normalizes any logger-shaped object into the two-method surface the telemetry pipeline depends on: ‘#info(message)` and `#error(message)`. Every dispatch is wrapped in a `rescue StandardError` so a misbehaving logger can never propagate out of telemetry code paths (Requirements 5.5, 21.1, 21.2, 21.3).
## Per-dispatch selection rule
On every ‘#info` / `#error` call, in order:
-
If the wrapped logger responds to the requested level (‘:info` or `:error`), call it.
-
Otherwise, if the wrapped logger responds to ‘:call`, invoke `logger.call(level, message)`.
-
Otherwise, fall back to ‘Kernel.warn(message)`.
Any ‘StandardError` raised by the chosen step is swallowed and the call returns `nil`. Non-`StandardError` exceptions (`Interrupt`, `SystemExit`, `SignalException`, `NoMemoryError`) are intentionally allowed to propagate.
## Construction
Use LoggerAdapter.from to build an adapter from a host-supplied ‘options.logger`. When no logger is configured, the factory falls back to `BetterAuth::Logger.create` so callers always get a usable adapter that responds to `info` and `error`.
Class Method Summary collapse
- .callable_shape?(logger) ⇒ Boolean private
-
.from(options_logger) ⇒ LoggerAdapter
Build a LoggerAdapter from the host-supplied logger, falling back to the default Logger when none is configured.
- .logger_shape?(logger) ⇒ Boolean private
Instance Method Summary collapse
-
#error(message) ⇒ nil
Dispatch an error-level log entry through the wrapped logger.
-
#info(message) ⇒ nil
Dispatch an info-level log entry through the wrapped logger.
-
#initialize(logger) ⇒ LoggerAdapter
constructor
A new instance of LoggerAdapter.
Constructor Details
#initialize(logger) ⇒ LoggerAdapter
Returns a new instance of LoggerAdapter.
81 82 83 |
# File 'lib/better_auth/telemetry/logger_adapter.rb', line 81 def initialize(logger) @logger = logger end |
Class Method Details
.callable_shape?(logger) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
74 75 76 |
# File 'lib/better_auth/telemetry/logger_adapter.rb', line 74 def self.callable_shape?(logger) !logger.nil? && logger.respond_to?(:call) end |
.from(options_logger) ⇒ LoggerAdapter
Build a BetterAuth::Telemetry::LoggerAdapter from the host-supplied logger, falling back to the default Logger when none is configured.
Selection rules:
-
If ‘options_logger` is non-`nil` and responds to both `:info` and `:error`, wrap it as-is.
-
Else if ‘options_logger` is non-`nil` and responds to `:call`, wrap the callable.
-
Else fall back to ‘BetterAuth::Logger.create`.
61 62 63 64 65 66 |
# File 'lib/better_auth/telemetry/logger_adapter.rb', line 61 def self.from() return new() if logger_shape?() return new() if callable_shape?() new(::BetterAuth::Logger.create) end |
.logger_shape?(logger) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
69 70 71 |
# File 'lib/better_auth/telemetry/logger_adapter.rb', line 69 def self.logger_shape?(logger) !logger.nil? && logger.respond_to?(:info) && logger.respond_to?(:error) end |
Instance Method Details
#error(message) ⇒ nil
Dispatch an error-level log entry through the wrapped logger.
97 98 99 |
# File 'lib/better_auth/telemetry/logger_adapter.rb', line 97 def error() log(:error, ) end |
#info(message) ⇒ nil
Dispatch an info-level log entry through the wrapped logger.
89 90 91 |
# File 'lib/better_auth/telemetry/logger_adapter.rb', line 89 def info() log(:info, ) end |