From 6c912dd7d15fd053eb285c60c73a0d9f5025d5c8 Mon Sep 17 00:00:00 2001 From: Reid Morrison Date: Tue, 30 Jul 2024 10:18:18 -0400 Subject: [PATCH] Send keys as strings and move more attributes to the formatter --- .../appender/open_telemetry.rb | 36 ++++++------------- .../formatters/open_telemetry.rb | 30 +++++++++++++--- 2 files changed, 36 insertions(+), 30 deletions(-) diff --git a/lib/semantic_logger/appender/open_telemetry.rb b/lib/semantic_logger/appender/open_telemetry.rb index 97aa44b..38e6e73 100644 --- a/lib/semantic_logger/appender/open_telemetry.rb +++ b/lib/semantic_logger/appender/open_telemetry.rb @@ -43,15 +43,18 @@ def initialize(name: "SemanticLogger", def log(log) # return log_metric(log) if metrics && log.metric_only? - ap formatter.call(log, self) - ap log.payload + body = formatter.call(log, self) + level = body.delete(:level) + level_index = body.delete(:level_index) + time = body.delete(:time) + payload = body.delete(:payload) @logger.on_emit( - severity_text: log.level.to_s, - severity_number: severity_number(log.level), - timestamp: log.time, - body: formatter.call(log, self), - attributes: log.payload, + severity_text: level, + severity_number: level_index, + timestamp: time, + body: body.transform_keys!(&:to_s), + attributes: payload, context: log.context[:open_telemetry] || ::OpenTelemetry::Context.current ) true @@ -76,25 +79,6 @@ def close # ap log.payload # true # end - - def severity_number(severity) - case severity.downcase - when :trace - ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_TRACE - when :debug - ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_DEBUG - when :info - ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_INFO - when :warn - ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_WARN - when :error - ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_ERROR - when :fatal - ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_FATAL - else - ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_UNSPECIFIED - end - end end end end diff --git a/lib/semantic_logger/formatters/open_telemetry.rb b/lib/semantic_logger/formatters/open_telemetry.rb index b49269e..1914994 100644 --- a/lib/semantic_logger/formatters/open_telemetry.rb +++ b/lib/semantic_logger/formatters/open_telemetry.rb @@ -2,16 +2,38 @@ module SemanticLogger module Formatters class OpenTelemetry < Raw - # Remove the following fields since they are sent via the OpenTelemetry API - def time - end - # Log level def level + hash[:level] = log.level.to_s + hash[:level_index] = severity_number(log.level_index) end # Payload is submitted directly as attributes def payload + return unless log.payload.respond_to?(:empty?) && !log.payload.empty? + + hash[:payload] = log.payload.transform_keys!(&:to_s) + end + + private + + def severity_number(severity) + case severity + when :trace + ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_TRACE + when :debug + ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_DEBUG + when :info + ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_INFO + when :warn + ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_WARN + when :error + ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_ERROR + when :fatal + ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_FATAL + else + ::OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_UNSPECIFIED + end end end end