semantic_logger 4.2.0 → 4.2.1
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 +4 -4
- data/README.md +3 -3
- data/Rakefile +1 -1
- data/lib/semantic_logger/ansi_colors.rb +11 -12
- data/lib/semantic_logger/appender.rb +4 -5
- data/lib/semantic_logger/appender/async.rb +24 -16
- data/lib/semantic_logger/appender/async_batch.rb +1 -4
- data/lib/semantic_logger/appender/bugsnag.rb +67 -63
- data/lib/semantic_logger/appender/elasticsearch.rb +154 -157
- data/lib/semantic_logger/appender/elasticsearch_http.rb +59 -55
- data/lib/semantic_logger/appender/file.rb +1 -3
- data/lib/semantic_logger/appender/graylog.rb +114 -110
- data/lib/semantic_logger/appender/honeybadger.rb +54 -51
- data/lib/semantic_logger/appender/http.rb +194 -190
- data/lib/semantic_logger/appender/kafka.rb +152 -149
- data/lib/semantic_logger/appender/mongodb.rb +3 -3
- data/lib/semantic_logger/appender/new_relic.rb +52 -49
- data/lib/semantic_logger/appender/sentry.rb +59 -54
- data/lib/semantic_logger/appender/splunk.rb +108 -103
- data/lib/semantic_logger/appender/splunk_http.rb +82 -79
- data/lib/semantic_logger/appender/syslog.rb +4 -5
- data/lib/semantic_logger/appender/tcp.rb +8 -29
- data/lib/semantic_logger/appender/udp.rb +2 -3
- data/lib/semantic_logger/appender/wrapper.rb +2 -2
- data/lib/semantic_logger/base.rb +18 -16
- data/lib/semantic_logger/concerns/compatibility.rb +0 -1
- data/lib/semantic_logger/core_ext/thread.rb +0 -1
- data/lib/semantic_logger/formatters.rb +3 -5
- data/lib/semantic_logger/formatters/base.rb +2 -3
- data/lib/semantic_logger/formatters/color.rb +29 -12
- data/lib/semantic_logger/formatters/default.rb +10 -10
- data/lib/semantic_logger/formatters/json.rb +0 -2
- data/lib/semantic_logger/formatters/one_line.rb +2 -2
- data/lib/semantic_logger/formatters/raw.rb +7 -10
- data/lib/semantic_logger/formatters/signalfx.rb +3 -5
- data/lib/semantic_logger/formatters/syslog.rb +2 -3
- data/lib/semantic_logger/formatters/syslog_cee.rb +2 -3
- data/lib/semantic_logger/jruby/garbage_collection_logger.rb +8 -5
- data/lib/semantic_logger/log.rb +17 -17
- data/lib/semantic_logger/loggable.rb +6 -9
- data/lib/semantic_logger/logger.rb +0 -1
- data/lib/semantic_logger/metric/new_relic.rb +58 -55
- data/lib/semantic_logger/metric/signalfx.rb +108 -106
- data/lib/semantic_logger/metric/statsd.rb +2 -3
- data/lib/semantic_logger/processor.rb +9 -9
- data/lib/semantic_logger/semantic_logger.rb +50 -30
- data/lib/semantic_logger/subscriber.rb +0 -1
- data/lib/semantic_logger/utils.rb +37 -37
- data/lib/semantic_logger/version.rb +2 -2
- data/test/appender/async_batch_test.rb +0 -1
- data/test/appender/async_test.rb +0 -1
- data/test/appender/bugsnag_test.rb +7 -8
- data/test/appender/elasticsearch_http_test.rb +5 -6
- data/test/appender/elasticsearch_test.rb +14 -10
- data/test/appender/file_test.rb +5 -6
- data/test/appender/graylog_test.rb +8 -8
- data/test/appender/honeybadger_test.rb +6 -7
- data/test/appender/http_test.rb +4 -5
- data/test/appender/kafka_test.rb +5 -6
- data/test/appender/mongodb_test.rb +11 -13
- data/test/appender/new_relic_test.rb +8 -9
- data/test/appender/newrelic_rpm.rb +1 -1
- data/test/appender/sentry_test.rb +7 -8
- data/test/appender/splunk_http_test.rb +4 -4
- data/test/appender/splunk_test.rb +1 -3
- data/test/appender/syslog_test.rb +3 -5
- data/test/appender/tcp_test.rb +4 -5
- data/test/appender/udp_test.rb +4 -5
- data/test/appender/wrapper_test.rb +2 -3
- data/test/concerns/compatibility_test.rb +0 -1
- data/test/debug_as_trace_logger_test.rb +0 -1
- data/test/formatters/color_test.rb +5 -6
- data/test/formatters/default_test.rb +16 -17
- data/test/formatters/one_line_test.rb +1 -2
- data/test/formatters/signalfx_test.rb +8 -11
- data/test/formatters_test.rb +3 -3
- data/test/in_memory_appender.rb +0 -1
- data/test/in_memory_appender_helper.rb +1 -1
- data/test/in_memory_batch_appender.rb +0 -1
- data/test/in_memory_metrics_appender.rb +0 -1
- data/test/loggable_test.rb +2 -3
- data/test/logger_test.rb +11 -14
- data/test/measure_test.rb +13 -15
- data/test/metric/new_relic_test.rb +2 -3
- data/test/metric/signalfx_test.rb +4 -5
- data/test/semantic_logger_test.rb +28 -3
- data/test/test_helper.rb +6 -7
- metadata +34 -34
@@ -20,18 +20,16 @@ module SemanticLogger
|
|
20
20
|
# - Proc
|
21
21
|
# - Any object that responds to :call
|
22
22
|
def self.factory(formatter)
|
23
|
-
|
24
|
-
when formatter.is_a?(Symbol)
|
23
|
+
if formatter.is_a?(Symbol)
|
25
24
|
SemanticLogger::Utils.constantize_symbol(formatter, 'SemanticLogger::Formatters').new
|
26
|
-
|
25
|
+
elsif formatter.is_a?(Hash) && formatter.size.positive?
|
27
26
|
fmt, options = formatter.first
|
28
27
|
SemanticLogger::Utils.constantize_symbol(fmt.to_sym, 'SemanticLogger::Formatters').new(options)
|
29
|
-
|
28
|
+
elsif formatter.respond_to?(:call)
|
30
29
|
formatter
|
31
30
|
else
|
32
31
|
raise(ArgumentError, "Unknown formatter: #{formatter.inspect}")
|
33
32
|
end
|
34
33
|
end
|
35
|
-
|
36
34
|
end
|
37
35
|
end
|
@@ -8,7 +8,7 @@ module SemanticLogger
|
|
8
8
|
# JRuby 9.1.8.0 supports microseconds
|
9
9
|
PRECISION =
|
10
10
|
if defined?(JRuby)
|
11
|
-
if
|
11
|
+
if JRUBY_VERSION.to_f >= 9.1
|
12
12
|
maint = JRUBY_VERSION.match(/\A\d+\.\d+\.(\d+)\./)[1].to_i
|
13
13
|
(maint >= 8) || (JRUBY_VERSION.to_f > 9.1) ? 6 : 3
|
14
14
|
else
|
@@ -17,7 +17,7 @@ module SemanticLogger
|
|
17
17
|
else
|
18
18
|
6
|
19
19
|
end
|
20
|
-
TIME_FORMAT = "%Y-%m-%d %H:%M:%S.%#{PRECISION}N"
|
20
|
+
TIME_FORMAT = "%Y-%m-%d %H:%M:%S.%#{PRECISION}N".freeze
|
21
21
|
|
22
22
|
# Parameters
|
23
23
|
# time_format: [String|Symbol|nil]
|
@@ -56,7 +56,6 @@ module SemanticLogger
|
|
56
56
|
time.strftime(time_format)
|
57
57
|
end
|
58
58
|
end
|
59
|
-
|
60
59
|
end
|
61
60
|
end
|
62
61
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
begin
|
3
3
|
require 'awesome_print'
|
4
4
|
rescue LoadError
|
5
|
+
nil
|
5
6
|
end
|
6
7
|
|
7
8
|
module SemanticLogger
|
@@ -13,7 +14,14 @@ module SemanticLogger
|
|
13
14
|
class ColorMap
|
14
15
|
attr_accessor :trace, :debug, :info, :warn, :error, :fatal, :bold, :clear
|
15
16
|
|
16
|
-
def initialize(trace: AnsiColors::MAGENTA,
|
17
|
+
def initialize(trace: AnsiColors::MAGENTA,
|
18
|
+
debug: AnsiColors::GREEN,
|
19
|
+
info: AnsiColors::CYAN,
|
20
|
+
warn: AnsiColors::BOLD,
|
21
|
+
error: AnsiColors::RED,
|
22
|
+
fatal: AnsiColors::RED,
|
23
|
+
bold: AnsiColors::BOLD,
|
24
|
+
clear: AnsiColors::CLEAR)
|
17
25
|
@trace = trace
|
18
26
|
@debug = debug
|
19
27
|
@info = info
|
@@ -50,7 +58,11 @@ module SemanticLogger
|
|
50
58
|
#
|
51
59
|
# color_map: [Hash | SemanticLogger::Formatters::Color::ColorMap]
|
52
60
|
# ColorMaps each of the log levels to a color
|
53
|
-
def initialize(ap: {multiline: false},
|
61
|
+
def initialize(ap: {multiline: false},
|
62
|
+
color_map: ColorMap.new,
|
63
|
+
time_format: TIME_FORMAT,
|
64
|
+
log_host: false,
|
65
|
+
log_application: false)
|
54
66
|
@ai_options = ap
|
55
67
|
@color_map = color_map.is_a?(ColorMap) ? color_map : ColorMap.new(color_map)
|
56
68
|
super(time_format: time_format, log_host: log_host, log_application: log_application)
|
@@ -66,11 +78,12 @@ module SemanticLogger
|
|
66
78
|
|
67
79
|
# Named Tags
|
68
80
|
def named_tags
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
81
|
+
named_tags = log.named_tags
|
82
|
+
return if named_tags.nil? || named_tags.empty?
|
83
|
+
|
84
|
+
list = []
|
85
|
+
named_tags.each_pair { |name, value| list << "#{color}#{name}: #{value}#{color_map.clear}" }
|
86
|
+
"{#{list.join(', ')}}"
|
74
87
|
end
|
75
88
|
|
76
89
|
def duration
|
@@ -82,25 +95,29 @@ module SemanticLogger
|
|
82
95
|
end
|
83
96
|
|
84
97
|
def payload
|
85
|
-
return unless log.
|
98
|
+
return unless log.payload?
|
86
99
|
|
87
100
|
if !defined?(AwesomePrint) || !log.payload.respond_to?(:ai)
|
88
101
|
super
|
89
102
|
else
|
90
|
-
|
103
|
+
begin
|
104
|
+
"-- #{log.payload.ai(@ai_options)}"
|
105
|
+
rescue StandardError
|
106
|
+
super
|
107
|
+
end
|
91
108
|
end
|
92
109
|
end
|
93
110
|
|
94
111
|
def exception
|
95
|
-
|
112
|
+
return unless log.exception
|
113
|
+
|
114
|
+
"-- Exception: #{color}#{log.exception.class}: #{log.exception.message}#{color_map.clear}\n#{log.backtrace_to_s}"
|
96
115
|
end
|
97
116
|
|
98
117
|
def call(log, logger)
|
99
118
|
self.color = color_map[log.level]
|
100
119
|
super(log, logger)
|
101
120
|
end
|
102
|
-
|
103
121
|
end
|
104
122
|
end
|
105
123
|
end
|
106
|
-
|
@@ -24,11 +24,12 @@ module SemanticLogger
|
|
24
24
|
|
25
25
|
# Named Tags
|
26
26
|
def named_tags
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
named_tags = log.named_tags
|
28
|
+
return if named_tags.nil? || named_tags.empty?
|
29
|
+
|
30
|
+
list = []
|
31
|
+
named_tags.each_pair { |name, value| list << "#{name}: #{value}" }
|
32
|
+
"{#{list.join(', ')}}"
|
32
33
|
end
|
33
34
|
|
34
35
|
# Duration
|
@@ -48,9 +49,10 @@ module SemanticLogger
|
|
48
49
|
|
49
50
|
# Payload
|
50
51
|
def payload
|
51
|
-
|
52
|
-
|
53
|
-
|
52
|
+
pl = log.payload_to_s
|
53
|
+
return unless pl
|
54
|
+
|
55
|
+
"-- #{pl}"
|
54
56
|
end
|
55
57
|
|
56
58
|
# Exception
|
@@ -67,8 +69,6 @@ module SemanticLogger
|
|
67
69
|
|
68
70
|
[time, level, process_info, tags, named_tags, duration, name, message, payload, exception].compact.join(' ')
|
69
71
|
end
|
70
|
-
|
71
72
|
end
|
72
73
|
end
|
73
74
|
end
|
74
|
-
|
@@ -7,11 +7,11 @@ module SemanticLogger
|
|
7
7
|
# * Exceptions only include the class and message, the stack trace is not shown.
|
8
8
|
class OneLine < Default
|
9
9
|
def message
|
10
|
-
"-- #{log.message.
|
10
|
+
"-- #{log.message.delete("\n")}" if log.message
|
11
11
|
end
|
12
12
|
|
13
13
|
def exception
|
14
|
-
"-- Exception: #{log.exception.class}: #{log.exception.message.
|
14
|
+
"-- Exception: #{log.exception.class}: #{log.exception.message.delete("\n")}" if log.exception
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -2,7 +2,6 @@ require 'json'
|
|
2
2
|
module SemanticLogger
|
3
3
|
module Formatters
|
4
4
|
class Raw < Base
|
5
|
-
|
6
5
|
# Fields are added by populating this hash.
|
7
6
|
attr_accessor :hash, :log, :logger, :time_key
|
8
7
|
|
@@ -35,14 +34,14 @@ module SemanticLogger
|
|
35
34
|
|
36
35
|
# Process info
|
37
36
|
def process_info
|
38
|
-
hash[:pid] =
|
37
|
+
hash[:pid] = $PROCESS_ID
|
39
38
|
hash[:thread] = log.thread_name
|
40
39
|
|
41
40
|
file, line = log.file_name_and_line
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
return unless file
|
42
|
+
|
43
|
+
hash[:file] = file
|
44
|
+
hash[:line] = line.to_i
|
46
45
|
end
|
47
46
|
|
48
47
|
# Tags
|
@@ -75,7 +74,7 @@ module SemanticLogger
|
|
75
74
|
|
76
75
|
# Payload
|
77
76
|
def payload
|
78
|
-
hash[:payload] = log.payload if log.payload
|
77
|
+
hash[:payload] = log.payload if log.payload&.respond_to?(:empty?) && !log.payload.empty?
|
79
78
|
end
|
80
79
|
|
81
80
|
# Exception
|
@@ -83,7 +82,7 @@ module SemanticLogger
|
|
83
82
|
return unless log.exception
|
84
83
|
root = hash
|
85
84
|
log.each_exception do |exception, i|
|
86
|
-
name = i
|
85
|
+
name = i.zero? ? :exception : :cause
|
87
86
|
root[name] = {
|
88
87
|
name: exception.class.name,
|
89
88
|
message: exception.message,
|
@@ -108,8 +107,6 @@ module SemanticLogger
|
|
108
107
|
host; application; time; level; process_info; duration; tags; named_tags; name; message; payload; exception; metric
|
109
108
|
hash
|
110
109
|
end
|
111
|
-
|
112
110
|
end
|
113
111
|
end
|
114
112
|
end
|
115
|
-
|
@@ -30,13 +30,12 @@ module SemanticLogger
|
|
30
30
|
# Strip leading '/'
|
31
31
|
# Convert remaining '/' to '.'
|
32
32
|
def metric
|
33
|
+
name = log.metric.to_s.sub(/\A\/+/, '')
|
33
34
|
if log.dimensions
|
34
|
-
name
|
35
|
-
name.gsub!('/', '.')
|
35
|
+
name.tr!('/', '.')
|
36
36
|
hash[:metric] = name
|
37
37
|
else
|
38
38
|
# Extract class and action from metric name
|
39
|
-
name = log.metric.to_s.sub(/\A\/+/, '')
|
40
39
|
names = name.split('/')
|
41
40
|
h = (hash[:dimensions] ||= {})
|
42
41
|
if names.size > 1
|
@@ -75,7 +74,7 @@ module SemanticLogger
|
|
75
74
|
name = name.to_sym
|
76
75
|
value = value.to_s
|
77
76
|
next if value.empty?
|
78
|
-
h[name] = value if dimensions
|
77
|
+
h[name] = value if dimensions&.include?(name)
|
79
78
|
end
|
80
79
|
end
|
81
80
|
h[:host] = logger.host if log_host && logger.host
|
@@ -163,7 +162,6 @@ module SemanticLogger
|
|
163
162
|
(item[:dimensions] == metric[:dimensions])
|
164
163
|
end
|
165
164
|
end
|
166
|
-
|
167
165
|
end
|
168
166
|
end
|
169
167
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
begin
|
2
2
|
require 'syslog_protocol'
|
3
3
|
rescue LoadError
|
4
|
-
raise 'Gem syslog_protocol is required for remote logging using the Syslog
|
4
|
+
raise 'Gem syslog_protocol is required for remote logging using the Syslog protocol. Please add the gem "syslog_protocol" to your Gemfile.'
|
5
5
|
end
|
6
6
|
|
7
7
|
module SemanticLogger
|
@@ -73,7 +73,7 @@ module SemanticLogger
|
|
73
73
|
packet = SyslogProtocol::Packet.new
|
74
74
|
packet.hostname = logger.host
|
75
75
|
packet.facility = facility
|
76
|
-
packet.tag = logger.application.
|
76
|
+
packet.tag = logger.application.delete(' ')
|
77
77
|
packet.content = message
|
78
78
|
packet.time = log.time
|
79
79
|
packet.severity = level_map[log.level]
|
@@ -82,4 +82,3 @@ module SemanticLogger
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
end
|
85
|
-
|
@@ -1,7 +1,7 @@
|
|
1
1
|
begin
|
2
2
|
require 'syslog_protocol'
|
3
3
|
rescue LoadError
|
4
|
-
raise 'Gem syslog_protocol is required for remote logging using the Syslog
|
4
|
+
raise 'Gem syslog_protocol is required for remote logging using the Syslog protocol. Please add the gem "syslog_protocol" to your Gemfile.'
|
5
5
|
end
|
6
6
|
|
7
7
|
module SemanticLogger
|
@@ -45,7 +45,7 @@ module SemanticLogger
|
|
45
45
|
packet = SyslogProtocol::Packet.new
|
46
46
|
packet.hostname = logger.host
|
47
47
|
packet.facility = facility
|
48
|
-
packet.tag = logger.application.
|
48
|
+
packet.tag = logger.application.delete(' ')
|
49
49
|
packet.content = message
|
50
50
|
packet.time = log.time
|
51
51
|
packet.severity = level_map[log.level]
|
@@ -54,4 +54,3 @@ module SemanticLogger
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
57
|
-
|
@@ -5,7 +5,7 @@ module SemanticLogger
|
|
5
5
|
|
6
6
|
# Only log the garbage collection if the number of microseconds exceeds
|
7
7
|
# this value
|
8
|
-
def initialize(min_microseconds =
|
8
|
+
def initialize(min_microseconds = 10_000)
|
9
9
|
@min_microseconds = min_microseconds
|
10
10
|
end
|
11
11
|
|
@@ -17,11 +17,14 @@ module SemanticLogger
|
|
17
17
|
info = Java::ComSunManagement::GarbageCollectionNotificationInfo.from(notification.user_data)
|
18
18
|
gc_info = info.gc_info
|
19
19
|
duration = gc_info.duration
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
|
21
|
+
return unless duration >= @min_microseconds
|
22
|
+
|
23
|
+
SemanticLogger['GarbageCollector'].measure_warn(
|
24
|
+
"Garbage Collection completed: #{info.gc_name} ##{gc_info.id}",
|
25
|
+
duration: duration.to_f / 1000
|
26
|
+
)
|
23
27
|
end
|
24
28
|
end
|
25
|
-
|
26
29
|
end
|
27
30
|
end
|
data/lib/semantic_logger/log.rb
CHANGED
@@ -97,6 +97,7 @@ module SemanticLogger
|
|
97
97
|
self.message = "#{message} -- Exception: #{exception.class}: #{exception.message}"
|
98
98
|
when nil, :none
|
99
99
|
# Log the message without the exception that was raised
|
100
|
+
nil
|
100
101
|
else
|
101
102
|
raise(ArgumentError, "Invalid value:#{log_exception.inspect} for argument :log_exception")
|
102
103
|
end
|
@@ -119,7 +120,7 @@ module SemanticLogger
|
|
119
120
|
self.dimensions = dimensions
|
120
121
|
end
|
121
122
|
|
122
|
-
self.payload = payload if payload
|
123
|
+
self.payload = payload if payload&.size&.positive?
|
123
124
|
true
|
124
125
|
end
|
125
126
|
|
@@ -150,7 +151,7 @@ module SemanticLogger
|
|
150
151
|
assign(message: message, payload: payload, exception: exception)
|
151
152
|
elsif message.nil? && result.is_a?(Hash)
|
152
153
|
assign(result)
|
153
|
-
elsif payload
|
154
|
+
elsif payload&.respond_to?(:merge)
|
154
155
|
assign(message: message, payload: payload.merge(result), exception: exception)
|
155
156
|
else
|
156
157
|
assign(message: message, payload: result, exception: exception)
|
@@ -167,7 +168,7 @@ module SemanticLogger
|
|
167
168
|
depth = 0
|
168
169
|
exceptions = []
|
169
170
|
ex = exception
|
170
|
-
while ex
|
171
|
+
while !ex.nil? && !exceptions.include?(ex) && exceptions.length < MAX_EXCEPTIONS_TO_UNWRAP
|
171
172
|
exceptions << ex
|
172
173
|
yield(ex, depth)
|
173
174
|
|
@@ -187,7 +188,7 @@ module SemanticLogger
|
|
187
188
|
def backtrace_to_s
|
188
189
|
trace = ''
|
189
190
|
each_exception do |exception, i|
|
190
|
-
if i
|
191
|
+
if i.zero?
|
191
192
|
trace = (exception.backtrace || []).join("\n")
|
192
193
|
else
|
193
194
|
trace << "\nCause: #{exception.class.name}: #{exception.message}\n#{(exception.backtrace || []).join("\n")}"
|
@@ -206,7 +207,7 @@ module SemanticLogger
|
|
206
207
|
else
|
207
208
|
def duration_to_s
|
208
209
|
return unless duration
|
209
|
-
duration < 10.0 ? "#{'%.3f'
|
210
|
+
duration < 10.0 ? "#{format('%.3f', duration)}ms" : "#{format('%.1f', duration)}ms"
|
210
211
|
end
|
211
212
|
end
|
212
213
|
|
@@ -214,14 +215,14 @@ module SemanticLogger
|
|
214
215
|
def duration_human
|
215
216
|
return nil unless duration
|
216
217
|
seconds = duration / 1000
|
217
|
-
if seconds >=
|
218
|
-
"#{(seconds /
|
218
|
+
if seconds >= 86_400.0 # 1 day
|
219
|
+
"#{(seconds / 86_400).to_i}d #{Time.at(seconds).strftime('%-Hh %-Mm')}"
|
219
220
|
elsif seconds >= 3600.0 # 1 hour
|
220
221
|
Time.at(seconds).strftime('%-Hh %-Mm')
|
221
222
|
elsif seconds >= 60.0 # 1 minute
|
222
223
|
Time.at(seconds).strftime('%-Mm %-Ss')
|
223
224
|
elsif seconds >= 1.0 # 1 second
|
224
|
-
"#{'%.3f'
|
225
|
+
"#{format('%.3f', seconds)}s"
|
225
226
|
else
|
226
227
|
duration_to_s
|
227
228
|
end
|
@@ -239,7 +240,7 @@ module SemanticLogger
|
|
239
240
|
file, line = file_name_and_line(true)
|
240
241
|
file_name = " #{file}:#{line}" if file
|
241
242
|
|
242
|
-
"#{
|
243
|
+
"#{$PROCESS_ID}:#{format("%.#{thread_name_length}s", thread_name)}#{file_name}"
|
243
244
|
end
|
244
245
|
|
245
246
|
CALLER_REGEXP = /^(.*):(\d+).*/
|
@@ -253,10 +254,8 @@ module SemanticLogger
|
|
253
254
|
# Returns [String, String] the file_name and line_number from the backtrace supplied
|
254
255
|
# in either the backtrace or exception
|
255
256
|
def file_name_and_line(short_name = false)
|
256
|
-
|
257
|
-
|
258
|
-
extract_file_and_line(stack, short_name) if stack && stack.size > 0
|
259
|
-
end
|
257
|
+
stack = backtrace || exception&.backtrace
|
258
|
+
extract_file_and_line(stack, short_name) if stack&.size&.positive?
|
260
259
|
end
|
261
260
|
|
262
261
|
# Strip the standard Rails colorizing from the logged message
|
@@ -267,14 +266,17 @@ module SemanticLogger
|
|
267
266
|
# Return the payload in text form
|
268
267
|
# Returns nil if payload is missing or empty
|
269
268
|
def payload_to_s
|
270
|
-
payload.inspect if
|
269
|
+
payload.inspect if payload?
|
271
270
|
end
|
272
271
|
|
273
272
|
# Returns [true|false] whether the log entry has a payload
|
274
|
-
def
|
273
|
+
def payload?
|
275
274
|
!(payload.nil? || (payload.respond_to?(:empty?) && payload.empty?))
|
276
275
|
end
|
277
276
|
|
277
|
+
# DEPRECATED
|
278
|
+
alias has_payload? payload?
|
279
|
+
|
278
280
|
# DEPRECATED
|
279
281
|
def formatted_time
|
280
282
|
time.strftime(Formatters::Base::TIME_FORMAT)
|
@@ -297,7 +299,5 @@ module SemanticLogger
|
|
297
299
|
def metric_only?
|
298
300
|
metric && message.nil? && exception.nil? && payload.nil?
|
299
301
|
end
|
300
|
-
|
301
302
|
end
|
302
|
-
|
303
303
|
end
|