nexus_semantic_logger 1.8.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f13512ab6f95abaa8a782f2718438d924eeca7dd1ae014c0f5419b14f0b13bfa
4
- data.tar.gz: 54594c63bca42969a1639e1d6295f51a6b4faf5222e340c8dbd0e00a9e16390b
3
+ metadata.gz: d57a5a486139a60e0e5de042138019b44dcd7535ed1efbd7dabfae3675e642b9
4
+ data.tar.gz: 982141f8ee6a724cc1d276ab9919951d5ed528277da596074ddc105e6fec4fc1
5
5
  SHA512:
6
- metadata.gz: bc42282551ce7a194ab0e4891296891cfb0520943f7c4ba383c259a90ef59d035aacdc756c11f5ab2d18d17175e655d919d6d46f50399c8c51bde831343801e1
7
- data.tar.gz: b4e966ed8e476ede32c07cfb85e16ebfb00337d7b7ba8fb9989bae1f180a2f170349f78b617b5aeae2d0c4edacf2b16d77748e566db7e89967fb8004eea3c186
6
+ metadata.gz: 67d8a2f40cbdfcf5122765a2d0009ad2438fe0fce64a30fa08584e728e5d4f8867e418cd047f2a8c24ac3f9531468bfe8cac96ccb1317e2f95d7fddf23cdaf3f
7
+ data.tar.gz: 426ae82619142b34e2e5e3ad425ac77d6f0eb944a70f3fd814d8d5cfdba9df8f083785a53e85fbb1127dea3a5e093e56f8449ca089fbb142c32bdee09ba2cb6d
@@ -39,6 +39,8 @@ module NexusSemanticLogger
39
39
 
40
40
  NexusSemanticLogger::DatadogTracer.new(service)
41
41
 
42
+ SemanticLogger.on_log(NexusSemanticLogger::LoggerMetricsSubscriber.new)
43
+
42
44
  logger.info('SemanticLogger initialised.', level: config.log_level)
43
45
 
44
46
  config.after_initialize do
@@ -17,7 +17,7 @@ module NexusSemanticLogger
17
17
  # @param [String] metric Metric name.
18
18
  # @param [Array<String>] tags Additional tags.
19
19
  def increment(metric, tags: [])
20
- statsd&.increment(metric, tags: global_tags + tags)
20
+ statsd&.increment(metric, tags: combine_tags(tags))
21
21
  flush
22
22
  end
23
23
 
@@ -25,7 +25,7 @@ module NexusSemanticLogger
25
25
  # @param [String] metric Metric name.
26
26
  # @param [Array<String>] tags Additional tags.
27
27
  def decrement(metric, tags: [])
28
- statsd&.decrement(metric, tags: global_tags + tags)
28
+ statsd&.decrement(metric, tags: combine_tags(tags))
29
29
  flush
30
30
  end
31
31
 
@@ -34,7 +34,7 @@ module NexusSemanticLogger
34
34
  # @param [Integer] ms Timing in milliseconds.
35
35
  # @param [Array<String>] tags Additional tags.
36
36
  def timing(metric, ms, tags: [])
37
- statsd&.timing(metric, ms, tags: global_tags + tags)
37
+ statsd&.timing(metric, ms, tags: combine_tags(tags))
38
38
  flush
39
39
  end
40
40
 
@@ -43,7 +43,7 @@ module NexusSemanticLogger
43
43
  # @param [Numeric] value Distribution value.
44
44
  # @param [Array<String>] tags Additional tags.
45
45
  def distribution(metric, value, tags: [])
46
- statsd&.distribution(metric, value, tags: global_tags + tags)
46
+ statsd&.distribution(metric, value, tags: combine_tags(tags))
47
47
  flush
48
48
  end
49
49
 
@@ -52,8 +52,18 @@ module NexusSemanticLogger
52
52
  # @param [Numeric] value Gauge value.
53
53
  # @param [Array<String>] tags Additional tags.
54
54
  def gauge(metric, value, tags: [])
55
- statsd&.gauge(metric, value, tags: global_tags + tags)
55
+ statsd&.gauge(metric, value, tags: combine_tags(tags))
56
56
  flush
57
57
  end
58
+
59
+ private
60
+
61
+ # Safely combine the global tags with the supplied tags.
62
+ def combine_tags(tags)
63
+ final_tags = []
64
+ final_tags += global_tags unless global_tags.nil?
65
+ final_tags += tags unless tags.nil?
66
+ final_tags
67
+ end
58
68
  end
59
69
  end
@@ -11,7 +11,8 @@ module ActionDispatch
11
11
  undef_method :log_error
12
12
 
13
13
  def log_error(request, wrapper)
14
- return if !log_rescued_responses?(request) && wrapper.rescue_response?
14
+ # log_rescued_responses? is a rails7 feature, but this gem is also used on rails6. Check for its existence.
15
+ return if respond_to?('log_rescued_responses?') && !log_rescued_responses?(request) && wrapper.rescue_response?
15
16
 
16
17
  ActiveSupport::Deprecation.silence do
17
18
  ActionController::Base.logger.fatal(wrapper.exception)
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+ require 'semantic_logger'
3
+
4
+ module NexusSemanticLogger
5
+ # Sends SemanticLogger metrics to statsd.
6
+ # See https://logger.rocketjob.io/metrics.html
7
+ # Based on https://github.com/reidmorrison/semantic_logger/blob/master/lib/semantic_logger/metric/statsd.rb
8
+ class LoggerMetricsSubscriber < SemanticLogger::Subscriber
9
+ def call(log)
10
+ log(log) if should_log?(log)
11
+ end
12
+
13
+ def log(log)
14
+ metric = log.metric
15
+ tags = log.payload.nil? ? nil : []
16
+ log.payload&.each_pair { |key, value| tags << "#{key}:#{value}" }
17
+ if (duration = log.duration)
18
+ NexusSemanticLogger.metrics.timing(metric, duration, tags: tags)
19
+ else
20
+ amount = (log.metric_amount || 1).round
21
+ if amount.negative?
22
+ NexusSemanticLogger.metrics.decrement(metric, tags: tags)
23
+ else
24
+ NexusSemanticLogger.metrics.increment(metric, tags: tags)
25
+ end
26
+ end
27
+ end
28
+
29
+ # Only forward log entries that contain metrics.
30
+ def should_log?(log)
31
+ # Does not support metrics with dimensions.
32
+ log.metric && !log.dimensions && meets_log_level?(log) && !filtered?(log)
33
+ end
34
+ end
35
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  module NexusSemanticLogger
3
- # Leave this as 1.8.0 in order for CI process to replace with the tagged version.
4
- VERSION = '1.8.0'
3
+ # Leave this as 1.10.0 in order for CI process to replace with the tagged version.
4
+ VERSION = '1.10.0'
5
5
  end
@@ -4,6 +4,7 @@ require 'nexus_semantic_logger/application'
4
4
  require 'nexus_semantic_logger/datadog_formatter'
5
5
  require 'nexus_semantic_logger/datadog_singleton'
6
6
  require 'nexus_semantic_logger/datadog_tracer'
7
+ require 'nexus_semantic_logger/logger_metrics_subscriber'
7
8
 
8
9
  module NexusSemanticLogger
9
10
  # Get application wide object for sending metrics.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nexus_semantic_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johnathon Harris
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-28 00:00:00.000000000 Z
11
+ date: 2023-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: amazing_print
@@ -112,6 +112,7 @@ files:
112
112
  - lib/nexus_semantic_logger/datadog_singleton.rb
113
113
  - lib/nexus_semantic_logger/datadog_tracer.rb
114
114
  - lib/nexus_semantic_logger/extensions/action_dispatch/debug_exceptions.rb
115
+ - lib/nexus_semantic_logger/logger_metrics_subscriber.rb
115
116
  - lib/nexus_semantic_logger/sneakers_metrics.rb
116
117
  - lib/nexus_semantic_logger/version.rb
117
118
  - nexus_semantic_logger.gemspec
@@ -133,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
134
  - !ruby/object:Gem::Version
134
135
  version: '0'
135
136
  requirements: []
136
- rubygems_version: 3.3.26
137
+ rubygems_version: 3.4.6
137
138
  signing_key:
138
139
  specification_version: 4
139
140
  summary: semantic_logger usage for nexus