contextual_logger 0.8.0 → 0.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 +4 -4
- data/lib/contextual_logger.rb +58 -53
- data/lib/contextual_logger/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fe842aebc69d35423b8b06cb1c3dc270fc64d5541293c946dc8eb4f6bc274ed
|
4
|
+
data.tar.gz: b3591004af708bd8722c313c222bf85dc4452053d2d2deb7c8abda72a500391e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f79aa7e16d8b788b8b641fd8d62109f67c4e566ee4bb90a816fd9cf894729bc74354bcb01935ff6f15a3ed330bb0ea56629d9ad7cc24ef4d3cbe68fe8203270c
|
7
|
+
data.tar.gz: ec0406c0265718ee617a55f209e004805df6ce516d36a080680dda648e59ffd61ae48ebd654f1ced16db34c4bfcd83584002757b1abb8ce8fb6104582dca0307
|
data/lib/contextual_logger.rb
CHANGED
@@ -7,6 +7,16 @@ require_relative './contextual_logger/redactor'
|
|
7
7
|
require_relative './contextual_logger/context/handler'
|
8
8
|
|
9
9
|
module ContextualLogger
|
10
|
+
LOG_LEVEL_NAMES_TO_SEVERITY =
|
11
|
+
{
|
12
|
+
debug: Logger::Severity::DEBUG,
|
13
|
+
info: Logger::Severity::INFO,
|
14
|
+
warn: Logger::Severity::WARN,
|
15
|
+
error: Logger::Severity::ERROR,
|
16
|
+
fatal: Logger::Severity::FATAL,
|
17
|
+
unknown: Logger::Severity::UNKNOWN
|
18
|
+
}.freeze
|
19
|
+
|
10
20
|
class << self
|
11
21
|
def new(logger)
|
12
22
|
logger.extend(LoggerMixin)
|
@@ -17,22 +27,8 @@ module ContextualLogger
|
|
17
27
|
if log_level.is_a?(Integer) && (Logger::Severity::DEBUG..Logger::Severity::UNKNOWN).include?(log_level)
|
18
28
|
log_level
|
19
29
|
else
|
20
|
-
|
21
|
-
when 'debug'
|
22
|
-
Logger::Severity::DEBUG
|
23
|
-
when 'info'
|
24
|
-
Logger::Severity::INFO
|
25
|
-
when 'warn'
|
26
|
-
Logger::Severity::WARN
|
27
|
-
when 'error'
|
28
|
-
Logger::Severity::ERROR
|
29
|
-
when 'fatal'
|
30
|
-
Logger::Severity::FATAL
|
31
|
-
when 'unknown'
|
32
|
-
Logger::Severity::UNKNOWN
|
33
|
-
else
|
30
|
+
LOG_LEVEL_NAMES_TO_SEVERITY[log_level.to_s.downcase.to_sym] or
|
34
31
|
raise ArgumentError, "invalid log level: #{log_level.inspect}"
|
35
|
-
end
|
36
32
|
end
|
37
33
|
end
|
38
34
|
|
@@ -72,45 +68,54 @@ module ContextualLogger
|
|
72
68
|
Context::Handler.current_context
|
73
69
|
end
|
74
70
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
add(Logger::Severity::INFO, message.nil? && block_given? ? yield : message, **context)
|
81
|
-
end
|
82
|
-
|
83
|
-
def warn(message = nil, context = {})
|
84
|
-
add(Logger::Severity::WARN, message.nil? && block_given? ? yield : message, **context)
|
85
|
-
end
|
86
|
-
|
87
|
-
def error(message = nil, context = {})
|
88
|
-
add(Logger::Severity::ERROR, message.nil? && block_given? ? yield : message, **context)
|
89
|
-
end
|
71
|
+
# In the methods generated below, we assume that presence of context means new code that is
|
72
|
+
# aware of ContextualLogger...and that that code never uses progname.
|
73
|
+
# This is important because we only get 3 args total (not including &block) passed to `add`,
|
74
|
+
# in order to be compatible with classic implementations like in the plain ::Logger and
|
75
|
+
# ActiveSupport::Logger.broadcast.
|
90
76
|
|
91
|
-
|
92
|
-
|
93
|
-
|
77
|
+
# Note that we can't yield before `add` because `add` might skip it based on log_level. And we can't check
|
78
|
+
# log_level here because we might be running in ActiveSupport::Logging.broadcast which has multiple
|
79
|
+
# loggers, each with their own log_level.
|
94
80
|
|
95
|
-
|
96
|
-
|
81
|
+
LOG_LEVEL_NAMES_TO_SEVERITY.each do |method_name, log_level|
|
82
|
+
class_eval(<<~EOS, __FILE__, __LINE__ + 1)
|
83
|
+
def #{method_name}(arg = nil, **context, &block)
|
84
|
+
if context.empty?
|
85
|
+
add(#{log_level}, nil, arg, &block)
|
86
|
+
else
|
87
|
+
if arg.nil?
|
88
|
+
add(#{log_level}, nil, context, &block)
|
89
|
+
elsif block
|
90
|
+
add(#{log_level}, nil, context.merge(progname: arg), &block)
|
91
|
+
else
|
92
|
+
add(#{log_level}, arg, context)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
EOS
|
97
97
|
end
|
98
98
|
|
99
99
|
def log_level_enabled?(severity)
|
100
100
|
severity >= level
|
101
101
|
end
|
102
102
|
|
103
|
-
|
104
|
-
|
103
|
+
# Note that this interface needs to stay compatible with the underlying ::Logger#add interface,
|
104
|
+
# which is: def add(severity, message = nil, progname = nil)
|
105
|
+
def add(arg_severity, arg1 = nil, arg2 = nil, **context) # Ruby will prefer to match hashes up to last ** argument
|
106
|
+
severity = arg_severity || UNKNOWN
|
105
107
|
if log_level_enabled?(severity)
|
106
|
-
|
107
|
-
if message.nil?
|
108
|
+
if arg1.nil?
|
108
109
|
if block_given?
|
109
110
|
message = yield
|
111
|
+
progname = arg2 || context.delete(:progname) || @progname
|
110
112
|
else
|
111
|
-
message =
|
113
|
+
message = arg2
|
112
114
|
progname = @progname
|
113
115
|
end
|
116
|
+
else
|
117
|
+
message = arg1
|
118
|
+
progname = arg2 || @progname
|
114
119
|
end
|
115
120
|
write_entry_to_log(severity, Time.now, progname, message, context: current_context_for_thread.deep_merge(context))
|
116
121
|
end
|
@@ -133,25 +138,25 @@ module ContextualLogger
|
|
133
138
|
end
|
134
139
|
|
135
140
|
def format_message(severity, timestamp, progname, message, context: {})
|
136
|
-
|
137
|
-
|
141
|
+
normalized_message = ContextualLogger.normalize_message(message)
|
142
|
+
normalized_progname = ContextualLogger.normalize_message(progname) unless progname.nil?
|
138
143
|
if @formatter
|
139
|
-
@formatter.call(severity, timestamp,
|
144
|
+
@formatter.call(severity, timestamp, normalized_progname, { message: normalized_message }.merge!(context))
|
140
145
|
else
|
141
|
-
"#{
|
146
|
+
"#{basic_json_log_entry(severity, timestamp, normalized_progname, normalized_message, context: context)}\n"
|
142
147
|
end
|
143
148
|
end
|
144
149
|
|
145
|
-
def
|
146
|
-
message_hash =
|
147
|
-
{
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
message_hash[:progname] = progname if progname
|
150
|
+
def basic_json_log_entry(severity, timestamp, normalized_progname, normalized_message, context:)
|
151
|
+
message_hash = {
|
152
|
+
message: normalized_progname ? "#{normalized_progname}: #{normalized_message}" : normalized_message,
|
153
|
+
severity: severity,
|
154
|
+
timestamp: timestamp
|
155
|
+
}
|
156
|
+
message_hash[:progname] = normalized_progname if normalized_progname
|
153
157
|
|
154
|
-
|
158
|
+
# merge! is faster and OK here since message_hash is still local only to this method
|
159
|
+
message_hash.merge!(context).to_json
|
155
160
|
end
|
156
161
|
end
|
157
162
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contextual_logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Ebentier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|