Skip to content
Snippets Groups Projects
Commit 5270ee34 authored by John Harris's avatar John Harris
Browse files

feat: support metrics sent via logger

parent 9f6d5285
No related branches found
Tags 1.7.3
No related merge requests found
Pipeline #41538 failed
......@@ -4,6 +4,7 @@ require 'nexus_semantic_logger/application'
require 'nexus_semantic_logger/datadog_formatter'
require 'nexus_semantic_logger/datadog_singleton'
require 'nexus_semantic_logger/datadog_tracer'
require 'nexus_semantic_logger/logger_metrics_subscriber'
module NexusSemanticLogger
# Get application wide object for sending metrics.
......
......@@ -39,6 +39,8 @@ module NexusSemanticLogger
NexusSemanticLogger::DatadogTracer.new(service)
SemanticLogger.on_log(NexusSemanticLogger::LoggerMetricsSubscriber.new)
logger.info('SemanticLogger initialised.', level: config.log_level)
config.after_initialize do
......
# frozen_string_literal: true
require 'semantic_logger'
module NexusSemanticLogger
# Sends SemanticLogger metrics to statsd.
# This is a candidate to move into the nexus_semantic_logger gem if it becomes widely useful.
# See https://logger.rocketjob.io/metrics.html
# Based on https://github.com/reidmorrison/semantic_logger/blob/master/lib/semantic_logger/metric/statsd.rb
class LoggerMetricsSubscriber < SemanticLogger::Subscriber
def call(log)
log(log) if should_log?(log)
end
def log(log)
metric = log.metric
tags = log.payload.nil? ? nil : []
log.payload.each_pair { |key, value| tags << "#{key}:#{value}" } unless log.payload.nil?
if (duration = log.duration)
NexusSemanticLogger.metrics.timing(metric, duration, tags: tags)
else
amount = (log.metric_amount || 1).round
if amount.negative?
NexusSemanticLogger.metrics.decrement(metric, tags: tags)
else
NexusSemanticLogger.metrics.increment(metric, tags: tags)
end
end
end
# Only forward log entries that contain metrics.
def should_log?(log)
# Does not support metrics with dimensions.
log.metric && !log.dimensions && meets_log_level?(log) && !filtered?(log)
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment