semantic_logger 4.12.0 → 4.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b09c37737f1e42edbeee95b036ba0581d5164d756e13de37aca9b22b3093cd45
4
- data.tar.gz: 9f66b72480df2371a7d305164e443f9667e1acd5521c1347d54c3841efbfa4c9
3
+ metadata.gz: 0c00e5f1ab5a36a350afa8a082d367ec78c59b62bcfc29027fa843be48b658d4
4
+ data.tar.gz: 5d77c0d14230c349b5dd58aa29b8f625ea867f7600665482a724b8f13db44f49
5
5
  SHA512:
6
- metadata.gz: fb27aa1a6d5dc1f2e0e6505ba9348a7cec091a153763361e8c9c20c21177bf84ac11ac2f21fc37ec994988ba31763dcd5c3134ac40a169ac987ed617eceec46e
7
- data.tar.gz: 5d084bc8cc57b1e836326eae912667ef6b7a284b0125c0b0acee678af78c01017b9667db9a43df7c0fb38af4998b0ab3128ac05d3e2bce266176e9c4d8fadccd
6
+ metadata.gz: e8c85cca0bf54d04235b12030c0602cdea04b597fcac1544819f25e1b3c40ae35a0874ed7d8b1286db370f5e4d122f812f2437f3e32c20ab45e443f3a735f641
7
+ data.tar.gz: 172a1ff0b357792afba013577a326e1e2a9ea1bf3b8e83d01f8e0424e2ae9332053322ccbbda328c3607930a7f9cdec0aa5d05daa5b871fdf75182fc806d731b
data/README.md CHANGED
@@ -55,6 +55,7 @@ and are therefore not automatically included by this gem:
55
55
  - Bugsnag Appender: gem 'bugsnag'
56
56
  - MongoDB Appender: gem 'mongo' 1.9.2 or above
57
57
  - NewRelic Appender: gem 'newrelic_rpm'
58
+ - NewRelicLogs Appender: gem 'newrelic_rpm'
58
59
  - Syslog Appender: gem 'syslog_protocol' 0.9.2 or above
59
60
  - Syslog Appender to a remote syslogng server over TCP or UDP: gem 'net_tcp_client'
60
61
  - Splunk Appender: gem 'splunk-sdk-ruby'
@@ -1,5 +1,3 @@
1
- require "concurrent"
2
-
3
1
  module SemanticLogger
4
2
  module Appender
5
3
  # Log asynchronously in batches using a separate thread.
@@ -160,10 +160,10 @@ module SemanticLogger
160
160
  end
161
161
 
162
162
  @http = if @proxy_uri
163
- Net::HTTP.new(server, port, @proxy_uri.host, @proxy_uri.port, @proxy_uri.user, @proxy_uri.password)
164
- else
165
- Net::HTTP.new(server, port, @proxy_url)
166
- end
163
+ Net::HTTP.new(server, port, @proxy_uri.host, @proxy_uri.port, @proxy_uri.user, @proxy_uri.password)
164
+ else
165
+ Net::HTTP.new(server, port, @proxy_url)
166
+ end
167
167
 
168
168
  if @ssl_options
169
169
  @http.methods.grep(/\A(\w+)=\z/) do |meth|
@@ -0,0 +1,57 @@
1
+ begin
2
+ require "newrelic_rpm"
3
+ rescue LoadError
4
+ raise LoadError, 'Gem newrelic_rpm is required for logging to New Relic. Please add the gem "newrelic_rpm" to your Gemfile.'
5
+ end
6
+
7
+ require "semantic_logger/formatters/new_relic_logs"
8
+
9
+ # Send log messages to NewRelic
10
+ #
11
+ # All log entries will appear under
12
+ # "Logs" in New Relic
13
+ #
14
+ # == Caveats
15
+ #
16
+ # * The NewRelic agent only sends logs to NewRelic when log forwarding is enabled. There is however an open
17
+ # issue to get this fixed: https://github.com/newrelic/newrelic-ruby-agent/issues/1614. Please see the guide
18
+ # for a workaround.
19
+ #
20
+ # Example:
21
+ # SemanticLogger.add_appender(appender: :new_relic_logs)
22
+ module SemanticLogger
23
+ module Appender
24
+ class NewRelicLogs < SemanticLogger::Subscriber
25
+ # Create Appender
26
+ #
27
+ # Parameters
28
+ # level: [:trace | :debug | :info | :warn | :error | :fatal]
29
+ # Override the log level for this appender.
30
+ # Default: SemanticLogger.default_level
31
+ #
32
+ # formatter: [Object|Proc]
33
+ # An instance of a class that implements #call, or a Proc to be used to format
34
+ # the output from this appender
35
+ # Default: SemanticLogger::Formatters::NewRelicLogs
36
+ #
37
+ # filter: [Regexp|Proc]
38
+ # RegExp: Only include log messages where the class name matches the supplied.
39
+ # regular expression. All other messages will be ignored.
40
+ # Proc: Only include log messages where the supplied Proc returns true
41
+ # The Proc must return true or false.
42
+ def initialize(formatter: SemanticLogger::Formatters::NewRelicLogs.new, **args, &block)
43
+ super(formatter: formatter, **args, &block)
44
+ end
45
+
46
+ # Send an error notification to New Relic
47
+ def log(log)
48
+ self.class.log_newrelic(formatter.call(log, self).to_json, log.level.to_s.upcase)
49
+ true
50
+ end
51
+
52
+ def self.log_newrelic(message, level)
53
+ ::NewRelic::Agent.agent.log_event_aggregator.record(message, level)
54
+ end
55
+ end
56
+ end
57
+ end
@@ -15,6 +15,7 @@ module SemanticLogger
15
15
  autoload :Http, "semantic_logger/appender/http"
16
16
  autoload :MongoDB, "semantic_logger/appender/mongodb"
17
17
  autoload :NewRelic, "semantic_logger/appender/new_relic"
18
+ autoload :NewRelicLogs, "semantic_logger/appender/new_relic_logs"
18
19
  autoload :Rabbitmq, "semantic_logger/appender/rabbitmq"
19
20
  autoload :Splunk, "semantic_logger/appender/splunk"
20
21
  autoload :SplunkHttp, "semantic_logger/appender/splunk_http"
@@ -77,7 +77,7 @@ module SemanticLogger
77
77
  # # Log an exception in a semantic way
78
78
  # logger.info("Parsing received XML", exc)
79
79
  #
80
- SemanticLogger::LEVELS.each_with_index do |level, index|
80
+ SemanticLogger::Levels::LEVELS.each_with_index do |level, index|
81
81
  class_eval <<~METHODS, __FILE__, __LINE__ + 1
82
82
  def #{level}(message=nil, payload=nil, exception=nil, &block)
83
83
  if level_index <= #{index}
@@ -23,7 +23,6 @@ module SemanticLogger
23
23
  # See Time#strftime for the format of this string.
24
24
  # :iso_8601 Outputs an ISO8601 Formatted timestamp.
25
25
  # :ms Output in miliseconds since epoch.
26
- # nil: Returns Empty string for time ( no time is output ).
27
26
  # Default: '%Y-%m-%d %H:%M:%S.%<precision>N'
28
27
  # log_host: [Boolean]
29
28
  # Whether or not to include hostname in logs
@@ -0,0 +1,109 @@
1
+ require "json"
2
+
3
+ begin
4
+ require "newrelic_rpm"
5
+ rescue LoadError
6
+ raise LoadError, 'Gem newrelic_rpm is required for logging to New Relic. Please add the gem "newrelic_rpm" to your Gemfile.'
7
+ end
8
+
9
+ raise "NewRelic::Agent.linking_metadata is not defined. Please update newrelic_rpm gem version" unless NewRelic::Agent.respond_to?(:linking_metadata)
10
+
11
+ raise "NewRelic::Agent::Tracer.current_span_id is not defined. Please update newrelic_rpm gem version" unless NewRelic::Agent::Tracer.respond_to?(:current_span_id)
12
+
13
+ raise "NewRelic::Agent::Tracer.current_trace_id is not defined. Please update newrelic_rpm gem version" unless NewRelic::Agent::Tracer.respond_to?(:current_trace_id)
14
+
15
+ module SemanticLogger
16
+ module Formatters
17
+ # Formatter for reporting to NewRelic's Logger
18
+ #
19
+ # New Relic's logs do not support custom attributes out of the box, and therefore these
20
+ # have to be put into a single JSON serialized string under the +message+ key.
21
+ #
22
+ # In particular the following fields of the log object are serialized under the +message+
23
+ # key that's sent to NewRelic:
24
+ #
25
+ # * message
26
+ # * tags
27
+ # * named_tags
28
+ # * payload
29
+ # * metric
30
+ # * metric_amount
31
+ # * environment
32
+ # * application
33
+ #
34
+ # == New Relic Attributes not Supported
35
+ # * thread.id
36
+ # * class.name
37
+ # * method.name
38
+ #
39
+ # == Reference
40
+ # * Logging specification
41
+ # * https://github.com/newrelic/newrelic-exporter-specs/tree/master/logging
42
+ #
43
+ # * Metadata APIs
44
+ # * https://www.rubydoc.info/gems/newrelic_rpm/NewRelic/Agent#linking_metadata-instance_method
45
+ # * https://www.rubydoc.info/gems/newrelic_rpm/NewRelic/Agent/Tracer#current_trace_id-class_method
46
+ # * https://www.rubydoc.info/gems/newrelic_rpm/NewRelic/Agent/Tracer#current_span_id-class_method
47
+ #
48
+ class NewRelicLogs < Raw
49
+ def initialize(**args)
50
+ args.delete(:time_key)
51
+ args.delete(:time_format)
52
+
53
+ super(time_key: :timestamp, time_format: :ms, **args)
54
+ end
55
+
56
+ def call(log, logger)
57
+ hash = super(log, logger)
58
+
59
+ message = {
60
+ message: hash[:message].to_s,
61
+ tags: hash[:tags] || [],
62
+ named_tags: hash[:named_tags] || {},
63
+
64
+ **hash.slice(:metric, :metric_amount, :environment, :application, :payload)
65
+ }
66
+
67
+ message.merge!(duration: hash[:duration_ms]) if hash.key?(:duration_ms)
68
+ message.merge!(duration_human: hash[:duration]) if hash.key?(:duration)
69
+
70
+ result = {
71
+ **new_relic_metadata,
72
+ message: message.to_json,
73
+ timestamp: hash[:timestamp].to_i,
74
+ "log.level": log.level.to_s.upcase,
75
+ "logger.name": log.name,
76
+ "thread.name": log.thread_name.to_s
77
+ }
78
+
79
+ if hash[:exception]
80
+ result.merge!(
81
+ "error.message": hash[:exception][:message],
82
+ "error.class": hash[:exception][:name],
83
+ "error.stack": hash[:exception][:stack_trace].join("\n")
84
+ )
85
+ end
86
+
87
+ if hash[:file]
88
+ result.merge!(
89
+ "file.name": hash[:file],
90
+ "line.number": hash[:line].to_s
91
+ )
92
+ end
93
+
94
+ result
95
+ end
96
+
97
+ private
98
+
99
+ def new_relic_metadata
100
+ {
101
+ "trace.id": NewRelic::Agent::Tracer.current_trace_id,
102
+ "span.id": NewRelic::Agent::Tracer.current_span_id,
103
+ **NewRelic::Agent.linking_metadata
104
+ }.reject { |_k, v| v.nil? }.
105
+ map { |k, v| [k.to_sym, v] }.to_h
106
+ end
107
+ end
108
+ end
109
+ end
@@ -1,16 +1,17 @@
1
1
  module SemanticLogger
2
2
  module Formatters
3
- autoload :Base, "semantic_logger/formatters/base"
4
- autoload :Color, "semantic_logger/formatters/color"
5
- autoload :Default, "semantic_logger/formatters/default"
6
- autoload :Json, "semantic_logger/formatters/json"
7
- autoload :Raw, "semantic_logger/formatters/raw"
8
- autoload :OneLine, "semantic_logger/formatters/one_line"
9
- autoload :Signalfx, "semantic_logger/formatters/signalfx"
10
- autoload :Syslog, "semantic_logger/formatters/syslog"
11
- autoload :Fluentd, "semantic_logger/formatters/fluentd"
12
- autoload :Logfmt, "semantic_logger/formatters/logfmt"
13
- autoload :SyslogCee, "semantic_logger/formatters/syslog_cee"
3
+ autoload :Base, "semantic_logger/formatters/base"
4
+ autoload :Color, "semantic_logger/formatters/color"
5
+ autoload :Default, "semantic_logger/formatters/default"
6
+ autoload :Json, "semantic_logger/formatters/json"
7
+ autoload :Raw, "semantic_logger/formatters/raw"
8
+ autoload :OneLine, "semantic_logger/formatters/one_line"
9
+ autoload :Signalfx, "semantic_logger/formatters/signalfx"
10
+ autoload :Syslog, "semantic_logger/formatters/syslog"
11
+ autoload :Fluentd, "semantic_logger/formatters/fluentd"
12
+ autoload :Logfmt, "semantic_logger/formatters/logfmt"
13
+ autoload :SyslogCee, "semantic_logger/formatters/syslog_cee"
14
+ autoload :NewRelicLogs, "semantic_logger/formatters/new_relic_logs"
14
15
 
15
16
  # Return formatter that responds to call.
16
17
  #
@@ -1,35 +1,31 @@
1
+ require "logger"
2
+
1
3
  module SemanticLogger
2
4
  module Levels
3
5
  # Logging levels in order of most detailed to most severe
4
6
  LEVELS = %i[trace debug info warn error fatal].freeze
5
7
 
8
+ # Map the built-in `Logger` levels to SemanticLogger levels.
9
+ MAPPED_LEVELS =
10
+ ::Logger::Severity.constants.each_with_object([]) do |constant, levels|
11
+ logger_value = ::Logger::Severity.const_get(constant)
12
+ levels[logger_value] = LEVELS.find_index(constant.downcase.to_sym) || LEVELS.find_index(:error)
13
+ end.freeze
14
+
6
15
  # Internal method to return the log level as an internal index
7
16
  # Also supports mapping the ::Logger levels to SemanticLogger levels
8
17
  def self.index(level)
9
18
  return if level.nil?
10
19
 
11
- index =
12
- if level.is_a?(Symbol)
13
- LEVELS.index(level)
14
- elsif level.is_a?(String)
15
- level = level.downcase.to_sym
16
- LEVELS.index(level)
17
- elsif level.is_a?(Integer) && defined?(::Logger::Severity)
18
- # Mapping of Rails and Ruby Logger levels to SemanticLogger levels
19
- @map_levels ||=
20
- begin
21
- levels = []
22
- ::Logger::Severity.constants.each do |constant|
23
- levels[::Logger::Severity.const_get(constant)] =
24
- LEVELS.find_index(constant.downcase.to_sym) || LEVELS.find_index(:error)
25
- end
26
- levels
27
- end
28
- @map_levels[level]
29
- end
30
- raise "Invalid level:#{level.inspect} being requested. Must be one of #{LEVELS.inspect}" unless index
31
-
32
- index
20
+ case level
21
+ when Symbol
22
+ LEVELS.index(level)
23
+ when String
24
+ LEVELS.index(level.downcase.to_sym)
25
+ when Integer
26
+ MAPPED_LEVELS[level]
27
+ end ||
28
+ raise(ArgumentError, "Invalid level:#{level.inspect} being requested. Must be one of #{LEVELS.inspect}")
33
29
  end
34
30
 
35
31
  # Returns the symbolic level for the supplied level index
@@ -1,4 +1,3 @@
1
- require "concurrent"
2
1
  module SemanticLogger
3
2
  # Logger stores the class name to be used for all log messages so that every
4
3
  # log message written by this instance will include the class name
@@ -1,4 +1,3 @@
1
- require "concurrent"
2
1
  require "socket"
3
2
 
4
3
  module SemanticLogger
@@ -517,4 +516,27 @@ module SemanticLogger
517
516
  @backtrace_level = :error
518
517
  @backtrace_level_index = Levels.index(@backtrace_level)
519
518
  @sync = false
519
+
520
+ # @formatter:off
521
+ module Metric
522
+ autoload :NewRelic, "semantic_logger/metric/new_relic"
523
+ autoload :Signalfx, "semantic_logger/metric/signalfx"
524
+ autoload :Statsd, "semantic_logger/metric/statsd"
525
+ end
526
+
527
+ module Reporters
528
+ autoload :Minitest, "semantic_logger/reporters/minitest"
529
+ end
530
+
531
+ module Test
532
+ autoload :CaptureLogEvents, "semantic_logger/test/capture_log_events"
533
+ autoload :Minitest, "semantic_logger/test/minitest"
534
+ end
535
+
536
+ if defined?(JRuby)
537
+ module JRuby
538
+ autoload :GarbageCollectionLogger, "semantic_logger/jruby/garbage_collection_logger"
539
+ end
540
+ end
541
+ # @formatter:on
520
542
  end
@@ -24,10 +24,15 @@ module SemanticLogger
24
24
  # By default collect all log levels, and collect metric only log events.
25
25
  def initialize(level: :trace, metrics: true)
26
26
  super(level: level, metrics: true)
27
+ @events = []
27
28
  end
28
29
 
29
30
  def log(log)
30
- (@events ||= []) << log
31
+ @events << log
32
+ end
33
+
34
+ def clear
35
+ @events.clear
31
36
  end
32
37
  end
33
38
  end
@@ -0,0 +1,53 @@
1
+ module SemanticLogger
2
+ module Test
3
+ module Minitest
4
+ # Returns [Array<SemanticLogger::Log>] the log events from Semantic Logger
5
+ # captured whilst executing the supplied block.
6
+ def semantic_logger_events(klass = nil, &block)
7
+ logger = SemanticLogger::Test::CaptureLogEvents.new
8
+ if klass
9
+ klass.stub(:logger, logger, &block)
10
+ else
11
+ SemanticLogger.silence(:trace) do
12
+ SemanticLogger::Logger.stub(:processor, logger, &block)
13
+ end
14
+ end
15
+ logger.events
16
+ end
17
+
18
+ # Verify a single log event has all the required attributes.
19
+ def assert_semantic_logger_event(event, level: nil, name: nil, message: nil, message_includes: nil,
20
+ payload: nil, payload_includes: nil,
21
+ thread_name: nil, tags: nil, named_tags: nil, context: nil,
22
+ metric: nil, metric_amount: nil, dimensions: nil)
23
+ msg = message || message_includes || "no message"
24
+ assert event, "Log event missing for message: '#{msg}'"
25
+ assert_equal message, event.message if message
26
+ assert_includes event.message, message_includes if message_includes
27
+ assert_equal name, event.name, -> { "Mismatched log name for message: '#{msg}'" } if name
28
+ assert_equal level, event.level, -> { "Mismatched log level for message: '#{msg}'" } if level
29
+
30
+ if payload_includes
31
+ payload_includes.each_pair do |key, expected_value|
32
+ value = event.payload[key]
33
+ if expected_value.nil?
34
+ assert_nil value, -> { "Mismatched key: #{key.inspect} in log payload: #{event.payload} for message: '#{msg}'" }
35
+ else
36
+ assert_equal expected_value, value, -> { "Mismatched key: #{key.inspect} in log payload: #{event.payload} for message: '#{msg}'" }
37
+ end
38
+ end
39
+ elsif payload
40
+ assert_equal payload, event.payload, -> { "Mismatched log payload: #{event.payload} for message: '#{msg}'" }
41
+ end
42
+
43
+ assert_equal thread_name, event.thread_name, -> { "Mismatched thread_name for message: '#{msg}'" } if thread_name
44
+ assert_equal tags, event.tags, -> { "Mismatched tags for message: '#{msg}'" } if tags
45
+ assert_equal named_tags, event.named_tags, -> { "Mismatched named_tags for message: '#{msg}'" } if named_tags
46
+ assert_equal context, event.context, -> { "Mismatched context for message: '#{msg}'" } if context
47
+ assert_equal metric, event.metric, -> { "Mismatched metric for message: '#{msg}'" } if metric
48
+ assert_equal metric_amount, event.metric_amount, -> { "Mismatched metric_amount for message: '#{msg}'" } if metric_amount
49
+ assert_equal dimensions, event.dimensions, -> { "Mismatched dimensions for message: '#{msg}'" } if dimensions
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,3 +1,3 @@
1
1
  module SemanticLogger
2
- VERSION = "4.12.0".freeze
2
+ VERSION = "4.13.0".freeze
3
3
  end
@@ -1,49 +1,22 @@
1
+ require "concurrent"
1
2
  require "semantic_logger/core_ext/thread"
2
3
  require "semantic_logger/version"
3
-
4
- # @formatter:off
5
- module SemanticLogger
6
- autoload :AnsiColors, "semantic_logger/ansi_colors"
7
- autoload :Appender, "semantic_logger/appender"
8
- autoload :Appenders, "semantic_logger/appenders"
9
- autoload :Base, "semantic_logger/base"
10
- autoload :DebugAsTraceLogger, "semantic_logger/debug_as_trace_logger"
11
- autoload :Formatters, "semantic_logger/formatters"
12
- autoload :Levels, "semantic_logger/levels"
13
- autoload :Log, "semantic_logger/log"
14
- autoload :Logger, "semantic_logger/logger"
15
- autoload :Loggable, "semantic_logger/loggable"
16
- autoload :Processor, "semantic_logger/processor"
17
- autoload :Subscriber, "semantic_logger/subscriber"
18
- autoload :SyncProcessor, "semantic_logger/sync_processor"
19
- autoload :Utils, "semantic_logger/utils"
20
-
21
- module Concerns
22
- autoload :Compatibility, "semantic_logger/concerns/compatibility"
23
- end
24
-
25
- module Metric
26
- autoload :NewRelic, "semantic_logger/metric/new_relic"
27
- autoload :Signalfx, "semantic_logger/metric/signalfx"
28
- autoload :Statsd, "semantic_logger/metric/statsd"
29
- end
30
-
31
- module Reporters
32
- autoload :Minitest, "semantic_logger/reporters/minitest"
33
- end
34
-
35
- module Test
36
- autoload :CaptureLogEvents, "semantic_logger/test/capture_log_events"
37
- end
38
-
39
- if defined?(JRuby)
40
- module JRuby
41
- autoload :GarbageCollectionLogger, "semantic_logger/jruby/garbage_collection_logger"
42
- end
43
- end
44
- end
4
+ require "semantic_logger/utils"
5
+ require "semantic_logger/ansi_colors"
6
+ require "semantic_logger/levels"
7
+ require "semantic_logger/base"
8
+ require "semantic_logger/formatters"
9
+ require "semantic_logger/log"
10
+ require "semantic_logger/subscriber"
11
+ require "semantic_logger/loggable"
12
+ require "semantic_logger/concerns/compatibility"
13
+ require "semantic_logger/appender"
14
+ require "semantic_logger/appenders"
15
+ require "semantic_logger/processor"
16
+ require "semantic_logger/sync_processor"
17
+ require "semantic_logger/logger"
18
+ require "semantic_logger/debug_as_trace_logger"
45
19
  require "semantic_logger/semantic_logger"
46
- # @formatter:on
47
20
 
48
21
  # Flush all appenders at exit, waiting for outstanding messages on the queue
49
22
  # to be written first.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semantic_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.12.0
4
+ version: 4.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reid Morrison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-30 00:00:00.000000000 Z
11
+ date: 2023-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -49,6 +49,7 @@ files:
49
49
  - lib/semantic_logger/appender/kafka.rb
50
50
  - lib/semantic_logger/appender/mongodb.rb
51
51
  - lib/semantic_logger/appender/new_relic.rb
52
+ - lib/semantic_logger/appender/new_relic_logs.rb
52
53
  - lib/semantic_logger/appender/rabbitmq.rb
53
54
  - lib/semantic_logger/appender/sentry.rb
54
55
  - lib/semantic_logger/appender/sentry_ruby.rb
@@ -70,6 +71,7 @@ files:
70
71
  - lib/semantic_logger/formatters/fluentd.rb
71
72
  - lib/semantic_logger/formatters/json.rb
72
73
  - lib/semantic_logger/formatters/logfmt.rb
74
+ - lib/semantic_logger/formatters/new_relic_logs.rb
73
75
  - lib/semantic_logger/formatters/one_line.rb
74
76
  - lib/semantic_logger/formatters/raw.rb
75
77
  - lib/semantic_logger/formatters/signalfx.rb
@@ -90,6 +92,7 @@ files:
90
92
  - lib/semantic_logger/sync.rb
91
93
  - lib/semantic_logger/sync_processor.rb
92
94
  - lib/semantic_logger/test/capture_log_events.rb
95
+ - lib/semantic_logger/test/minitest.rb
93
96
  - lib/semantic_logger/utils.rb
94
97
  - lib/semantic_logger/version.rb
95
98
  homepage: https://logger.rocketjob.io
@@ -111,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
114
  - !ruby/object:Gem::Version
112
115
  version: '0'
113
116
  requirements: []
114
- rubygems_version: 3.2.33
117
+ rubygems_version: 3.4.9
115
118
  signing_key:
116
119
  specification_version: 4
117
120
  summary: Feature rich logging framework, and replacement for existing Ruby & Rails