Class: Tracelit::RailsLoggerBridge::OTelLogger
- Inherits:
-
Logger
- Object
- Logger
- Tracelit::RailsLoggerBridge::OTelLogger
- Defined in:
- lib/tracelit/rails_logger_bridge.rb
Overview
OTelLogger is a Logger subclass whose add method emits an OTel LogRecord instead of writing to an IO device. It is added as a broadcast target so the original Rails logger output is preserved.
The SDK Logger#on_emit defaults context: to OpenTelemetry::Context.current, which automatically correlates the log record to the current active span (trace_id + span_id) without any extra work here.
Instance Method Summary collapse
- #add(severity, message = nil, progname = nil) ⇒ Object (also: #log)
- #close ⇒ Object
-
#initialize(otel_logger) ⇒ OTelLogger
constructor
A new instance of OTelLogger.
Constructor Details
#initialize(otel_logger) ⇒ OTelLogger
Returns a new instance of OTelLogger.
53 54 55 56 57 58 59 |
# File 'lib/tracelit/rails_logger_bridge.rb', line 53 def initialize(otel_logger) # Discard output — this logger only emits OTel records super(File::NULL) @otel_logger = otel_logger # Accept all severities so we don't filter below the original logger self.level = ::Logger::DEBUG end |
Instance Method Details
#add(severity, message = nil, progname = nil) ⇒ Object Also known as: log
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/tracelit/rails_logger_bridge.rb', line 61 def add(severity, = nil, progname = nil) severity_number = SEVERITY_MAP[severity.to_i] || 9 severity_text = ::Logger::SEV_LABEL[severity.to_i] || "ANY" body = if .nil? block_given? ? yield : progname else end @otel_logger.on_emit( timestamp: Time.now, severity_number: severity_number, severity_text: severity_text, body: body.to_s ) rescue StandardError # Never let OTel errors surface to the application end |
#close ⇒ Object
82 |
# File 'lib/tracelit/rails_logger_bridge.rb', line 82 def close; end |