Class: Foam::Ruby::OtelLogDevice
- Inherits:
-
Object
- Object
- Foam::Ruby::OtelLogDevice
- Defined in:
- lib/foam/ruby/log_subscriber.rb
Overview
Emits OTel log records. Attached to Rails.logger as a broadcast destination so existing log output (stdout, file, etc.) is preserved.
Constant Summary collapse
- SEVERITY_MAP =
{ Logger::DEBUG => OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_DEBUG, Logger::INFO => OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_INFO, Logger::WARN => OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_WARN, Logger::ERROR => OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_ERROR, Logger::FATAL => OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_FATAL, }.freeze
- SEVERITY_TEXT =
{ Logger::DEBUG => "DEBUG", Logger::INFO => "INFO", Logger::WARN => "WARN", Logger::ERROR => "ERROR", Logger::FATAL => "FATAL", }.freeze
Instance Method Summary collapse
- #emit(severity, message) ⇒ Object
-
#initialize ⇒ OtelLogDevice
constructor
A new instance of OtelLogDevice.
Constructor Details
#initialize ⇒ OtelLogDevice
Returns a new instance of OtelLogDevice.
26 27 28 |
# File 'lib/foam/ruby/log_subscriber.rb', line 26 def initialize @otel_logger = OpenTelemetry.logger_provider.logger(name: "foam-ruby") end |
Instance Method Details
#emit(severity, message) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/foam/ruby/log_subscriber.rb', line 30 def emit(severity, ) return if .nil? || (.respond_to?(:empty?) && .empty?) @otel_logger.on_emit( body: .to_s, severity_number: SEVERITY_MAP.fetch(severity, OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_INFO), severity_text: SEVERITY_TEXT.fetch(severity, "INFO"), timestamp: Time.now ) rescue StandardError => e warn "[foam-ruby] Failed to emit OTel log record: #{e.}" end |