lib/semantic_logger/formatters/open_telemetry.rb
require "json" module SemanticLogger module Formatters class OpenTelemetry < Raw # 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 end