mimi-logger 0.2.2 → 0.2.3
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 +36 -2
- data/lib/mimi/logger/version.rb +1 -1
- data/lib/mimi/logger.rb +60 -24
- 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: '08802d5b0a249e93a152ad6e55b97dac5f90235815621cf4e184f98f4579f8b0'
|
4
|
+
data.tar.gz: 0ed0db974edfae6ac95a1cbd4d3ad44328c1e2c77013598dc41811b5c83d0dba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd0d2e2ff59c4389a4cc0bbde0e594d1bb73a7931df7137b9e31126b42f884ed473747473fe18540721dd93fd670ffed38c6cfe299a97052081eec5a68fe0322
|
7
|
+
data.tar.gz: a6ba83b28d31f0586dd1c151fb944315d0d192abf44799c50206544e0ae869897baa5c4f9d392ee6861b57fb22668af4745bbfd9a5d2bc505308f743898ddf92
|
data/README.md
CHANGED
@@ -118,7 +118,7 @@ web requests will be interleaved and understanding the flow, the cause and effec
|
|
118
118
|
To solve this problem, Mimi::Logger allows for setting an arbitrary (or random) context ID, which is local
|
119
119
|
to the current thread, and which is included in every logged message.
|
120
120
|
|
121
|
-
A new context may be initiated by `.
|
121
|
+
A new context may be initiated by `.new_context!`:
|
122
122
|
|
123
123
|
```ruby
|
124
124
|
require 'mimi/logger'
|
@@ -126,7 +126,7 @@ require 'mimi/logger'
|
|
126
126
|
logger = Mimi::Logger.new
|
127
127
|
|
128
128
|
logger.info 'I am a banana!'
|
129
|
-
logger.
|
129
|
+
logger.new_context!
|
130
130
|
logger.info 'I am a banana!' # this is not the same banana, it's from a different context
|
131
131
|
```
|
132
132
|
|
@@ -156,6 +156,40 @@ new context ID in the beginning of your processing and pass it along with all th
|
|
156
156
|
other components of the system. Upon receiving such a request, another application sets its local context ID
|
157
157
|
to the received value and continues.
|
158
158
|
|
159
|
+
#### Preserving context
|
160
|
+
|
161
|
+
If necessary, it is possible to run a block of code in another logging context and restore
|
162
|
+
the original context after completion:
|
163
|
+
|
164
|
+
```ruby
|
165
|
+
require 'mimi/logger'
|
166
|
+
|
167
|
+
logger = Mimi::Logger.new
|
168
|
+
|
169
|
+
logger.context_id = 'original-context'
|
170
|
+
logger.with_preserved_context do
|
171
|
+
logger.context_id = 'another-context'
|
172
|
+
...
|
173
|
+
end
|
174
|
+
logger.context_id # => "original-context"
|
175
|
+
```
|
176
|
+
|
177
|
+
Or run a block of code with a new temporary context and restore the original one after completion:
|
178
|
+
|
179
|
+
```ruby
|
180
|
+
require 'mimi/logger'
|
181
|
+
|
182
|
+
logger = Mimi::Logger.new
|
183
|
+
|
184
|
+
logger.context_id = 'original-context'
|
185
|
+
logger.with_new_context do
|
186
|
+
logger.context_id # => "5d11f7c483dcfb2a"
|
187
|
+
...
|
188
|
+
end
|
189
|
+
logger.context_id # => "original-context"
|
190
|
+
```
|
191
|
+
|
192
|
+
|
159
193
|
## Contributing
|
160
194
|
|
161
195
|
Bug reports and pull requests are welcome on GitHub at https://github.com/kukushkin/mimi-logger. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
data/lib/mimi/logger/version.rb
CHANGED
data/lib/mimi/logger.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'forwardable'
|
@@ -17,10 +18,9 @@ module Mimi
|
|
17
18
|
include Mimi::Core::Module
|
18
19
|
|
19
20
|
attr_reader :logger_instance, :options
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
] => :logger_instance
|
21
|
+
|
22
|
+
delegate %i[debug? info? warn? error? fatal? << add log] => :logger_instance
|
23
|
+
delegate %i[context_id context_id= new_context! with_new_context with_preserved_context] => self
|
24
24
|
|
25
25
|
default_options(
|
26
26
|
format: 'json', # 'string' or 'json'
|
@@ -75,23 +75,36 @@ module Mimi
|
|
75
75
|
|
76
76
|
# Logs a new message at the corresponding logging level
|
77
77
|
#
|
78
|
-
#
|
79
|
-
#
|
80
78
|
def debug(*args, &block)
|
81
79
|
logger_instance.debug(args, &block)
|
82
80
|
end
|
81
|
+
|
82
|
+
# Logs a new message at the corresponding logging level
|
83
|
+
#
|
83
84
|
def info(*args, &block)
|
84
85
|
logger_instance.info(args, &block)
|
85
86
|
end
|
87
|
+
|
88
|
+
# Logs a new message at the corresponding logging level
|
89
|
+
#
|
86
90
|
def warn(*args, &block)
|
87
91
|
logger_instance.warn(args, &block)
|
88
92
|
end
|
93
|
+
|
94
|
+
# Logs a new message at the corresponding logging level
|
95
|
+
#
|
89
96
|
def error(*args, &block)
|
90
97
|
logger_instance.error(args, &block)
|
91
98
|
end
|
99
|
+
|
100
|
+
# Logs a new message at the corresponding logging level
|
101
|
+
#
|
92
102
|
def fatal(*args, &block)
|
93
103
|
logger_instance.fatal(args, &block)
|
94
104
|
end
|
105
|
+
|
106
|
+
# Logs a new message at the corresponding logging level
|
107
|
+
#
|
95
108
|
def unknown(*args, &block)
|
96
109
|
logger_instance.unknown(args, &block)
|
97
110
|
end
|
@@ -123,6 +136,7 @@ module Mimi
|
|
123
136
|
# Returns formatter Proc object depending on configured format
|
124
137
|
#
|
125
138
|
# @return [Proc]
|
139
|
+
# @private
|
126
140
|
#
|
127
141
|
def self.formatter(options)
|
128
142
|
case options[:format].to_s
|
@@ -138,8 +152,8 @@ module Mimi
|
|
138
152
|
# Returns formatter for 'json' format
|
139
153
|
#
|
140
154
|
# @param options [Hash] logger options
|
141
|
-
#
|
142
155
|
# @return [Proc]
|
156
|
+
# @private
|
143
157
|
#
|
144
158
|
def self.formatter_json(options)
|
145
159
|
proc do |severity, _datetime, _progname, message|
|
@@ -153,8 +167,8 @@ module Mimi
|
|
153
167
|
# Returns formatter for 'string' format
|
154
168
|
#
|
155
169
|
# @param options [Hash] logger options
|
156
|
-
#
|
157
170
|
# @return [Proc]
|
171
|
+
# @private
|
158
172
|
#
|
159
173
|
def self.formatter_string(options)
|
160
174
|
proc do |severity, _datetime, _progname, message|
|
@@ -183,6 +197,7 @@ module Mimi
|
|
183
197
|
# message and the rest are optional parameters passed in a Hash argument.
|
184
198
|
#
|
185
199
|
# @return [Hash]
|
200
|
+
# @private
|
186
201
|
#
|
187
202
|
def self.formatter_message_args_to_hash(message_args)
|
188
203
|
message_args = message_args.is_a?(String) || message_args.is_a?(Hash) ? [message_args] : message_args
|
@@ -218,44 +233,65 @@ module Mimi
|
|
218
233
|
# happening within same logical context, as a single operation. For example, processing
|
219
234
|
# an incoming request may be seen as a single context.
|
220
235
|
#
|
221
|
-
# Context ID is logged with every message
|
236
|
+
# Context ID is logged with every message.
|
222
237
|
#
|
223
238
|
# @return [String] a hex encoded context ID
|
224
239
|
#
|
225
240
|
def self.context_id
|
226
|
-
Thread.current[CONTEXT_ID_THREAD_VARIABLE] ||
|
227
|
-
end
|
228
|
-
|
229
|
-
def context_id
|
230
|
-
self.class.context_id
|
241
|
+
Thread.current[CONTEXT_ID_THREAD_VARIABLE] || new_context!
|
231
242
|
end
|
232
243
|
|
233
244
|
# Sets the new context ID to the given value
|
234
245
|
#
|
235
|
-
# @param id [String]
|
246
|
+
# @param id [String] a new context ID
|
247
|
+
# @return [String]
|
236
248
|
#
|
237
249
|
def self.context_id=(id)
|
238
250
|
Thread.current[CONTEXT_ID_THREAD_VARIABLE] = id
|
239
251
|
end
|
240
252
|
|
241
|
-
|
242
|
-
self.class.context_id = id
|
243
|
-
end
|
244
|
-
|
245
|
-
# Generates a new random context ID and sets it as current
|
253
|
+
# Starts a new logging context, generates a new random context ID and sets it as current
|
246
254
|
#
|
247
255
|
# @return [String] a new context ID
|
248
256
|
#
|
249
|
-
def self.
|
257
|
+
def self.new_context!
|
250
258
|
self.context_id = SecureRandom.hex(CONTEXT_ID_SIZE)
|
251
259
|
end
|
252
260
|
|
253
|
-
|
254
|
-
|
261
|
+
# Executes a given block and ensures the context is restored afterwards
|
262
|
+
#
|
263
|
+
# @example
|
264
|
+
# logger.context_id # => "5d11f7c483dcfb2a"
|
265
|
+
# logger.with_preserved_context do
|
266
|
+
# logger.context_id = "temporary-context"
|
267
|
+
# logger.context_id # => "temporary-context"
|
268
|
+
# end
|
269
|
+
# logger.context_id # => "5d11f7c483dcfb2a"
|
270
|
+
#
|
271
|
+
def self.with_preserved_context(&_block)
|
272
|
+
preserved_context_id = context_id
|
273
|
+
yield
|
274
|
+
ensure
|
275
|
+
self.context_id = preserved_context_id
|
255
276
|
end
|
256
277
|
|
257
|
-
#
|
278
|
+
# Executes a given block in a new context and restores the context afterwards
|
279
|
+
#
|
280
|
+
# @example
|
281
|
+
# logger.context_id # => "5d11f7c483dcfb2a"
|
282
|
+
# logger.with_new_context do
|
283
|
+
# logger.context_id # => "e211ef95633a04b5"
|
284
|
+
# end
|
285
|
+
# logger.context_id # => "5d11f7c483dcfb2a"
|
286
|
+
#
|
287
|
+
def self.with_new_context(&_block)
|
288
|
+
with_preserved_context do
|
289
|
+
new_context!
|
290
|
+
yield
|
291
|
+
end
|
292
|
+
end
|
258
293
|
|
294
|
+
# @private
|
259
295
|
def self.module_manifest
|
260
296
|
{
|
261
297
|
log_level: {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mimi-logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Kukushkin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mimi-core
|