semantic_logger 4.2.0 → 4.2.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 +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
|