class SemanticLogger::Appender::OpenTelemetry
def close
def close @logger.logger_provider.shutdown end
def flush
def flush @logger.logger_provider.force_flush end
def initialize(name: "SemanticLogger",
Example
To disable this default behavior set `metrics: false`
I.e. A metric without a message or an exception.
Metric only log events are sent to the Open Telemetry Metrics API instead of the Logs API.
Create a Open Telemetry Logger appender instance.
def initialize(name: "SemanticLogger", version: SemanticLogger::VERSION, formatter: SemanticLogger::Formatters::OpenTelemetry.new, metrics: true, **args, &block) @name = name @version = version @logger = ::OpenTelemetry.logger_provider.logger(name: @name, version: @version) # Capture the current Open Telemetry context when a log entry is captured. # Prevents duplicate subscribers as long as it is from a constant. SemanticLogger.on_log(CAPTURE_CONTEXT) super(formatter: formatter, metrics: metrics, **args, &block) end
def log(log)
def log(log) # return log_metric(log) if metrics && log.metric_only? 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: level, severity_number: level_index, timestamp: time, body: body.transform_keys!(&:to_s), attributes: payload, context: log.context[:open_telemetry] || ::OpenTelemetry::Context.current ) true end