semantic_logger 4.5.0 → 4.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/Rakefile +7 -7
- data/lib/semantic_logger.rb +23 -22
- data/lib/semantic_logger/ansi_colors.rb +0 -10
- data/lib/semantic_logger/appender.rb +54 -64
- data/lib/semantic_logger/appender/async.rb +10 -8
- data/lib/semantic_logger/appender/async_batch.rb +4 -2
- data/lib/semantic_logger/appender/bugsnag.rb +7 -7
- data/lib/semantic_logger/appender/elasticsearch.rb +12 -11
- data/lib/semantic_logger/appender/elasticsearch_http.rb +4 -4
- data/lib/semantic_logger/appender/file.rb +2 -1
- data/lib/semantic_logger/appender/graylog.rb +15 -10
- data/lib/semantic_logger/appender/honeybadger.rb +3 -3
- data/lib/semantic_logger/appender/http.rb +20 -18
- data/lib/semantic_logger/appender/kafka.rb +5 -5
- data/lib/semantic_logger/appender/mongodb.rb +6 -6
- data/lib/semantic_logger/appender/new_relic.rb +2 -2
- data/lib/semantic_logger/appender/rabbitmq.rb +5 -5
- data/lib/semantic_logger/appender/sentry.rb +7 -7
- data/lib/semantic_logger/appender/splunk.rb +6 -5
- data/lib/semantic_logger/appender/splunk_http.rb +3 -3
- data/lib/semantic_logger/appender/syslog.rb +12 -12
- data/lib/semantic_logger/appender/tcp.rb +9 -9
- data/lib/semantic_logger/appender/udp.rb +2 -2
- data/lib/semantic_logger/appenders.rb +13 -34
- data/lib/semantic_logger/base.rb +43 -31
- data/lib/semantic_logger/formatters.rb +11 -11
- data/lib/semantic_logger/formatters/base.rb +15 -6
- data/lib/semantic_logger/formatters/color.rb +12 -13
- data/lib/semantic_logger/formatters/default.rb +18 -5
- data/lib/semantic_logger/formatters/fluentd.rb +7 -18
- data/lib/semantic_logger/formatters/json.rb +3 -5
- data/lib/semantic_logger/formatters/raw.rb +39 -10
- data/lib/semantic_logger/formatters/signalfx.rb +14 -21
- data/lib/semantic_logger/formatters/syslog.rb +3 -3
- data/lib/semantic_logger/formatters/syslog_cee.rb +3 -3
- data/lib/semantic_logger/jruby/garbage_collection_logger.rb +4 -2
- data/lib/semantic_logger/levels.rb +9 -7
- data/lib/semantic_logger/log.rb +49 -73
- data/lib/semantic_logger/logger.rb +6 -8
- data/lib/semantic_logger/metric/new_relic.rb +3 -3
- data/lib/semantic_logger/metric/signalfx.rb +3 -3
- data/lib/semantic_logger/metric/statsd.rb +7 -7
- data/lib/semantic_logger/processor.rb +7 -5
- data/lib/semantic_logger/reporters/minitest.rb +4 -4
- data/lib/semantic_logger/semantic_logger.rb +37 -12
- data/lib/semantic_logger/subscriber.rb +14 -7
- data/lib/semantic_logger/sync.rb +12 -0
- data/lib/semantic_logger/sync_processor.rb +43 -0
- data/lib/semantic_logger/utils.rb +6 -6
- data/lib/semantic_logger/version.rb +1 -1
- metadata +5 -3
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "concurrent"
|
2
2
|
module SemanticLogger
|
3
3
|
# Logger stores the class name to be used for all log messages so that every
|
4
4
|
# log message written by this instance will include the class name
|
@@ -9,7 +9,7 @@ module SemanticLogger
|
|
9
9
|
subscriber = block || object
|
10
10
|
|
11
11
|
unless subscriber.is_a?(Proc) || subscriber.respond_to?(:call)
|
12
|
-
raise(
|
12
|
+
raise("When supplying an on_log subscriber, it must support the #call method")
|
13
13
|
end
|
14
14
|
|
15
15
|
subscribers = (@subscribers ||= Concurrent::Array.new)
|
@@ -21,7 +21,7 @@ module SemanticLogger
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.processor
|
24
|
-
@processor
|
24
|
+
@processor ||= SemanticLogger.sync? ? SyncProcessor.new : Processor.new
|
25
25
|
end
|
26
26
|
|
27
27
|
# Returns a Logger instance
|
@@ -63,9 +63,7 @@ module SemanticLogger
|
|
63
63
|
Logger.processor.log(log)
|
64
64
|
end
|
65
65
|
|
66
|
-
|
67
|
-
|
68
|
-
@processor = Processor.new
|
66
|
+
@processor = nil
|
69
67
|
@subscribers = nil
|
70
68
|
|
71
69
|
def self.call_subscribers(log)
|
@@ -74,8 +72,8 @@ module SemanticLogger
|
|
74
72
|
@subscribers.each do |subscriber|
|
75
73
|
begin
|
76
74
|
subscriber.call(log)
|
77
|
-
rescue Exception =>
|
78
|
-
|
75
|
+
rescue Exception => e
|
76
|
+
processor.logger.error("Exception calling :on_log subscriber", e)
|
79
77
|
end
|
80
78
|
end
|
81
79
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
begin
|
2
|
-
require
|
2
|
+
require "newrelic_rpm"
|
3
3
|
rescue LoadError
|
4
|
-
raise 'Gem newrelic_rpm is required for logging to New Relic. Please add the gem "newrelic_rpm" to your Gemfile.'
|
4
|
+
raise LoadError, 'Gem newrelic_rpm is required for logging to New Relic. Please add the gem "newrelic_rpm" to your Gemfile.'
|
5
5
|
end
|
6
6
|
|
7
7
|
# Send Metrics to NewRelic
|
@@ -37,7 +37,7 @@ module SemanticLogger
|
|
37
37
|
# regular expression. All other messages will be ignored.
|
38
38
|
# Proc: Only include log messages where the supplied Proc returns true
|
39
39
|
# The Proc must return true or false.
|
40
|
-
def initialize(prefix:
|
40
|
+
def initialize(prefix: "Custom", **args, &block)
|
41
41
|
@prefix = prefix
|
42
42
|
super(**args, &block)
|
43
43
|
end
|
@@ -10,7 +10,7 @@ module SemanticLogger
|
|
10
10
|
class Signalfx < SemanticLogger::Appender::Http
|
11
11
|
attr_reader :full_url
|
12
12
|
|
13
|
-
END_POINT =
|
13
|
+
END_POINT = "v2/datapoint".freeze
|
14
14
|
|
15
15
|
# Create SignalFx metrics appender.
|
16
16
|
#
|
@@ -75,7 +75,7 @@ module SemanticLogger
|
|
75
75
|
# end
|
76
76
|
def initialize(token:,
|
77
77
|
dimensions: nil,
|
78
|
-
url:
|
78
|
+
url: "https://ingest.signalfx.com",
|
79
79
|
formatter: nil,
|
80
80
|
**args,
|
81
81
|
&block)
|
@@ -84,7 +84,7 @@ module SemanticLogger
|
|
84
84
|
|
85
85
|
super(url: url, formatter: formatter, **args, &block)
|
86
86
|
|
87
|
-
@header[
|
87
|
+
@header["X-SF-TOKEN"] = token
|
88
88
|
@full_url = "#{url}/#{END_POINT}"
|
89
89
|
end
|
90
90
|
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require "uri"
|
2
2
|
begin
|
3
|
-
require
|
3
|
+
require "statsd-ruby"
|
4
4
|
rescue LoadError
|
5
|
-
raise 'Gem statsd-ruby is required for logging metrics. Please add the gem "statsd-ruby" to your Gemfile.'
|
5
|
+
raise LoadError, 'Gem statsd-ruby is required for logging metrics. Please add the gem "statsd-ruby" to your Gemfile.'
|
6
6
|
end
|
7
7
|
|
8
8
|
module SemanticLogger
|
@@ -26,17 +26,17 @@ module SemanticLogger
|
|
26
26
|
# metric: :statsd,
|
27
27
|
# url: 'localhost:8125'
|
28
28
|
# )
|
29
|
-
def initialize(url:
|
29
|
+
def initialize(url: "udp://localhost:8125")
|
30
30
|
@url = url
|
31
31
|
end
|
32
32
|
|
33
33
|
def reopen
|
34
34
|
uri = URI.parse(@url)
|
35
|
-
raise('Statsd only supports udp. Example: "udp://localhost:8125"') if uri.scheme !=
|
35
|
+
raise('Statsd only supports udp. Example: "udp://localhost:8125"') if uri.scheme != "udp"
|
36
36
|
|
37
37
|
@statsd = ::Statsd.new(uri.host, uri.port)
|
38
|
-
path = uri.path.chomp(
|
39
|
-
@statsd.namespace = path.sub(
|
38
|
+
path = uri.path.chomp("/")
|
39
|
+
@statsd.namespace = path.sub("/", "") if path != ""
|
40
40
|
end
|
41
41
|
|
42
42
|
def log(log)
|
@@ -13,11 +13,12 @@ module SemanticLogger
|
|
13
13
|
# For example when an appender is not working etc..
|
14
14
|
# By default logs to STDERR
|
15
15
|
def self.logger
|
16
|
-
@logger ||=
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
@logger ||=
|
17
|
+
begin
|
18
|
+
l = SemanticLogger::Appender::File.new(io: STDERR, level: :warn)
|
19
|
+
l.name = name
|
20
|
+
l
|
21
|
+
end
|
21
22
|
end
|
22
23
|
|
23
24
|
attr_reader :appenders
|
@@ -30,6 +31,7 @@ module SemanticLogger
|
|
30
31
|
# Start the appender thread
|
31
32
|
def start
|
32
33
|
return false if active?
|
34
|
+
|
33
35
|
thread
|
34
36
|
true
|
35
37
|
end
|
@@ -23,7 +23,7 @@ module SemanticLogger
|
|
23
23
|
class Minitest < ::Minitest::AbstractReporter
|
24
24
|
include SemanticLogger::Loggable
|
25
25
|
|
26
|
-
logger.name =
|
26
|
+
logger.name = "Minitest"
|
27
27
|
|
28
28
|
attr_accessor :io
|
29
29
|
|
@@ -33,11 +33,11 @@ module SemanticLogger
|
|
33
33
|
|
34
34
|
def after_test(test)
|
35
35
|
if test.error?
|
36
|
-
logger.benchmark_error("FAIL #{test.class_name} #{test.name}", duration: test.time * 1_000, metric:
|
36
|
+
logger.benchmark_error("FAIL #{test.class_name} #{test.name}", duration: test.time * 1_000, metric: "minitest/fail")
|
37
37
|
elsif test.skipped?
|
38
|
-
logger.benchmark_warn("SKIP #{test.class_name} #{test.name}", duration: test.time * 1_000, metric:
|
38
|
+
logger.benchmark_warn("SKIP #{test.class_name} #{test.name}", duration: test.time * 1_000, metric: "minitest/skip")
|
39
39
|
else
|
40
|
-
logger.benchmark_info("PASS #{test.class_name} #{test.name}", duration: test.time * 1_000, metric:
|
40
|
+
logger.benchmark_info("PASS #{test.class_name} #{test.name}", duration: test.time * 1_000, metric: "minitest/pass")
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "concurrent"
|
2
|
+
require "socket"
|
3
3
|
|
4
4
|
module SemanticLogger
|
5
5
|
# Logging levels in order of most detailed to most severe
|
@@ -52,7 +52,7 @@ module SemanticLogger
|
|
52
52
|
# Returns [String] name of this host for logging purposes
|
53
53
|
# Note: Not all appenders use `host`
|
54
54
|
def self.host
|
55
|
-
@host ||= Socket.gethostname.force_encoding(
|
55
|
+
@host ||= Socket.gethostname.force_encoding("UTF-8")
|
56
56
|
end
|
57
57
|
|
58
58
|
# Override the default host name
|
@@ -71,7 +71,19 @@ module SemanticLogger
|
|
71
71
|
@application = application
|
72
72
|
end
|
73
73
|
|
74
|
-
|
74
|
+
# Returns [String] name of this environment for logging purposes
|
75
|
+
# Note: Not all appenders use `environment`
|
76
|
+
def self.environment
|
77
|
+
@environment
|
78
|
+
end
|
79
|
+
|
80
|
+
# Override the default environment
|
81
|
+
def self.environment=(environment)
|
82
|
+
@environment = environment
|
83
|
+
end
|
84
|
+
|
85
|
+
@application = ENV["SEMANTIC_LOGGER_APP"] || "Semantic Logger"
|
86
|
+
@environment = ENV["SEMANTIC_LOGGER_ENV"] || ENV["RAILS_ENV"] || ENV["RACK_ENV"]
|
75
87
|
|
76
88
|
# Add a new logging appender as a new destination for all log messages
|
77
89
|
# emitted from Semantic Logger
|
@@ -151,8 +163,8 @@ module SemanticLogger
|
|
151
163
|
# logger = SemanticLogger['Example']
|
152
164
|
# logger.info "Hello World"
|
153
165
|
# logger.debug("Login time", user: 'Joe', duration: 100, ip_address: '127.0.0.1')
|
154
|
-
def self.add_appender(
|
155
|
-
appender = Logger.processor.appenders.add(
|
166
|
+
def self.add_appender(**args, &block)
|
167
|
+
appender = Logger.processor.appenders.add(**args, &block)
|
156
168
|
# Start appender thread if it is not already running
|
157
169
|
Logger.processor.start
|
158
170
|
appender
|
@@ -256,22 +268,23 @@ module SemanticLogger
|
|
256
268
|
# Note:
|
257
269
|
# To only register one of the signal handlers, set the other to nil
|
258
270
|
# Set gc_log_microseconds to nil to not enable JRuby Garbage collections
|
259
|
-
def self.add_signal_handler(log_level_signal =
|
271
|
+
def self.add_signal_handler(log_level_signal = "USR2", thread_dump_signal = "TTIN", gc_log_microseconds = 100_000)
|
260
272
|
if log_level_signal
|
261
273
|
Signal.trap(log_level_signal) do
|
262
274
|
index = default_level == :trace ? LEVELS.find_index(:error) : LEVELS.find_index(default_level)
|
263
275
|
new_level = LEVELS[index - 1]
|
264
|
-
self[
|
276
|
+
self["SemanticLogger"].warn "Changed global default log level to #{new_level.inspect}"
|
265
277
|
self.default_level = new_level
|
266
278
|
end
|
267
279
|
end
|
268
280
|
|
269
281
|
if thread_dump_signal
|
270
282
|
Signal.trap(thread_dump_signal) do
|
271
|
-
logger = SemanticLogger[
|
283
|
+
logger = SemanticLogger["Thread Dump"]
|
272
284
|
Thread.list.each do |thread|
|
273
285
|
# MRI re-uses the main thread for signals, JRuby uses `SIGTTIN handler` thread.
|
274
286
|
next if defined?(JRuby) && (thread == Thread.current)
|
287
|
+
|
275
288
|
logger.backtrace(thread: thread)
|
276
289
|
end
|
277
290
|
end
|
@@ -290,7 +303,7 @@ module SemanticLogger
|
|
290
303
|
# If the tag being supplied is definitely a string then this fast
|
291
304
|
# tag api can be used for short lived tags
|
292
305
|
def self.fast_tag(tag)
|
293
|
-
return yield if tag.nil? || tag ==
|
306
|
+
return yield if tag.nil? || tag == ""
|
294
307
|
|
295
308
|
t = Thread.current[:semantic_logger_tags] ||= []
|
296
309
|
begin
|
@@ -367,7 +380,7 @@ module SemanticLogger
|
|
367
380
|
# :nodoc
|
368
381
|
def self.named_tagged(hash)
|
369
382
|
return yield if hash.nil? || hash.empty?
|
370
|
-
raise(ArgumentError,
|
383
|
+
raise(ArgumentError, "#named_tagged only accepts named parameters (Hash)") unless hash.is_a?(Hash)
|
371
384
|
|
372
385
|
begin
|
373
386
|
push_named_tags(hash)
|
@@ -476,11 +489,23 @@ module SemanticLogger
|
|
476
489
|
Thread.current[:semantic_logger_silence] || @default_level_index
|
477
490
|
end
|
478
491
|
|
479
|
-
|
492
|
+
# Run Semantic Logger in Synchronous mode.
|
493
|
+
#
|
494
|
+
# I.e. Instead of logging messages in a separate thread for better performance,
|
495
|
+
# log them using the current thread.
|
496
|
+
def self.sync!
|
497
|
+
@sync = true
|
498
|
+
end
|
499
|
+
|
500
|
+
# Running in synchronous mode?
|
501
|
+
def self.sync?
|
502
|
+
@sync
|
503
|
+
end
|
480
504
|
|
481
505
|
# Initial default Level for all new instances of SemanticLogger::Logger
|
482
506
|
@default_level = :info
|
483
507
|
@default_level_index = Levels.index(@default_level)
|
484
508
|
@backtrace_level = :error
|
485
509
|
@backtrace_level_index = Levels.index(@backtrace_level)
|
510
|
+
@sync = false
|
486
511
|
end
|
@@ -5,7 +5,7 @@ module SemanticLogger
|
|
5
5
|
class Subscriber < SemanticLogger::Base
|
6
6
|
# Every appender has its own formatter
|
7
7
|
attr_reader :formatter
|
8
|
-
attr_writer :application, :host, :logger, :metrics
|
8
|
+
attr_writer :application, :environment, :host, :logger, :metrics
|
9
9
|
|
10
10
|
# Returns the current log level if set, otherwise it logs everything it receives.
|
11
11
|
def level
|
@@ -32,6 +32,11 @@ module SemanticLogger
|
|
32
32
|
@application || SemanticLogger.application
|
33
33
|
end
|
34
34
|
|
35
|
+
# Allow environment name to be set globally or on a per subscriber basis.
|
36
|
+
def environment
|
37
|
+
@environment || SemanticLogger.environment
|
38
|
+
end
|
39
|
+
|
35
40
|
# Allow host name to be set globally or on a per subscriber basis.
|
36
41
|
def host
|
37
42
|
@host || SemanticLogger.host
|
@@ -40,11 +45,12 @@ module SemanticLogger
|
|
40
45
|
# Give each appender its own logger for logging.
|
41
46
|
# For example trace messages sent to services or errors when something fails.
|
42
47
|
def logger
|
43
|
-
@logger ||=
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
+
@logger ||=
|
49
|
+
begin
|
50
|
+
logger = SemanticLogger::Processor.logger.clone
|
51
|
+
logger.name = self.class.name
|
52
|
+
logger
|
53
|
+
end
|
48
54
|
end
|
49
55
|
|
50
56
|
# Set the formatter from Symbol|Hash|Block
|
@@ -92,9 +98,10 @@ module SemanticLogger
|
|
92
98
|
# metrics: [Boolean]
|
93
99
|
# Whether to log metric only entries with this subscriber.
|
94
100
|
# Default: false
|
95
|
-
def initialize(level: nil, formatter: nil, filter: nil, application: nil, host: nil, metrics: false, &block)
|
101
|
+
def initialize(level: nil, formatter: nil, filter: nil, application: nil, environment: nil, host: nil, metrics: false, &block)
|
96
102
|
self.formatter = block || formatter
|
97
103
|
@application = application
|
104
|
+
@environment = environment
|
98
105
|
@host = host
|
99
106
|
@metrics = metrics
|
100
107
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# Run Semantic Logger in Synchronous mode.
|
2
|
+
#
|
3
|
+
# I.e. Instead of logging messages in a separate thread for better performance,
|
4
|
+
# log them using the current thread.
|
5
|
+
#
|
6
|
+
# Usage:
|
7
|
+
# require "semantic_logger/sync"
|
8
|
+
#
|
9
|
+
# Or, when using a Gemfile:
|
10
|
+
# gem "semantic_logger", require: "semantic_logger/sync"
|
11
|
+
require "semantic_logger"
|
12
|
+
SemanticLogger.sync!
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module SemanticLogger
|
2
|
+
# Thread that submits and processes log requests
|
3
|
+
class SyncProcessor
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
# Forward methods that can be called directly
|
7
|
+
def_delegator :@appenders, :add
|
8
|
+
def_delegator :@appenders, :log
|
9
|
+
def_delegator :@appenders, :flush
|
10
|
+
def_delegator :@appenders, :close
|
11
|
+
def_delegator :@appenders, :reopen
|
12
|
+
|
13
|
+
# Allow the internal logger to be overridden from its default of STDERR
|
14
|
+
# Can be replaced with another Ruby logger or Rails logger, but never to
|
15
|
+
# SemanticLogger::Logger itself since it is for reporting problems
|
16
|
+
# while trying to log to the various appenders
|
17
|
+
class << self
|
18
|
+
attr_writer :logger
|
19
|
+
end
|
20
|
+
|
21
|
+
# Internal logger for SemanticLogger
|
22
|
+
# For example when an appender is not working etc..
|
23
|
+
# By default logs to STDERR
|
24
|
+
def self.logger
|
25
|
+
@logger ||=
|
26
|
+
begin
|
27
|
+
l = SemanticLogger::Appender::File.new(io: STDERR, level: :warn)
|
28
|
+
l.name = name
|
29
|
+
l
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
attr_reader :appenders
|
34
|
+
|
35
|
+
def initialize
|
36
|
+
@appenders = Appenders.new(self.class.logger.dup)
|
37
|
+
end
|
38
|
+
|
39
|
+
def start
|
40
|
+
# NOP
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -2,7 +2,7 @@ module SemanticLogger
|
|
2
2
|
# Internal-use only utility functions for Semantic Logger.
|
3
3
|
# Not intended for public use.
|
4
4
|
module Utils
|
5
|
-
def self.constantize_symbol(symbol, namespace =
|
5
|
+
def self.constantize_symbol(symbol, namespace = "SemanticLogger::Appender")
|
6
6
|
klass = "#{namespace}::#{camelize(symbol.to_s)}"
|
7
7
|
begin
|
8
8
|
Object.const_get(klass)
|
@@ -15,8 +15,8 @@ module SemanticLogger
|
|
15
15
|
def self.camelize(term)
|
16
16
|
string = term.to_s
|
17
17
|
string = string.sub(/^[a-z\d]*/, &:capitalize)
|
18
|
-
string.gsub!(
|
19
|
-
string.gsub!(
|
18
|
+
string.gsub!(%r{(?:_|(/))([a-z\d]*)}i) { "#{Regexp.last_match(1)}#{Regexp.last_match(2).capitalize}" }
|
19
|
+
string.gsub!("/".freeze, "::".freeze)
|
20
20
|
string
|
21
21
|
end
|
22
22
|
|
@@ -32,7 +32,7 @@ module SemanticLogger
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
SELF_PATTERN = File.join(
|
35
|
+
SELF_PATTERN = File.join("lib", "semantic_logger")
|
36
36
|
|
37
37
|
# Extract the backtrace leaving out the last few Semantic Logger lines.
|
38
38
|
def self.extract_backtrace(stack = caller)
|
@@ -50,11 +50,11 @@ module SemanticLogger
|
|
50
50
|
stack
|
51
51
|
end
|
52
52
|
|
53
|
-
GEM_ROOT = File.expand_path(
|
53
|
+
GEM_ROOT = File.expand_path("../../..", __dir__) + "/"
|
54
54
|
|
55
55
|
def self.system_path?(path)
|
56
56
|
path.start_with?(GEM_ROOT) ||
|
57
|
-
path.start_with?(RbConfig::CONFIG[
|
57
|
+
path.start_with?(RbConfig::CONFIG["rubylibdir"])
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
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.
|
4
|
+
version: 4.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -85,6 +85,8 @@ files:
|
|
85
85
|
- lib/semantic_logger/reporters/minitest.rb
|
86
86
|
- lib/semantic_logger/semantic_logger.rb
|
87
87
|
- lib/semantic_logger/subscriber.rb
|
88
|
+
- lib/semantic_logger/sync.rb
|
89
|
+
- lib/semantic_logger/sync_processor.rb
|
88
90
|
- lib/semantic_logger/utils.rb
|
89
91
|
- lib/semantic_logger/version.rb
|
90
92
|
homepage: https://github.com/rocketjob/semantic_logger
|
@@ -106,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
108
|
- !ruby/object:Gem::Version
|
107
109
|
version: '0'
|
108
110
|
requirements: []
|
109
|
-
rubygems_version: 3.
|
111
|
+
rubygems_version: 3.1.2
|
110
112
|
signing_key:
|
111
113
|
specification_version: 4
|
112
114
|
summary: Feature rich logging framework, and replacement for existing Ruby & Rails
|