lorekeeper 2.4.0 → 2.6.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/CHANGELOG.md +6 -0
- data/README.md +18 -1
- data/bin/console +0 -0
- data/bin/setup +0 -0
- data/lib/lorekeeper/backtrace_cleaner.rb +61 -0
- data/lib/lorekeeper/json_logger.rb +4 -14
- data/lib/lorekeeper/version.rb +1 -1
- data/lib/lorekeeper.rb +1 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b1a026f727609772af1e77fb5423768e621b9db70c7efef8baa1b49cdb9642e
|
4
|
+
data.tar.gz: 7b966039ef152e8ec18256f4c76cda69bc221ec52d9e67fd11013f733a8eb60a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa4a33eccd5e1494b4c667f2566dfd34c4720a6fece96a8ecdb215d5c77da195c45640fb349979c7e21cc3e2cc2a31eb6c31f75533932a794fda4e915af9bee5
|
7
|
+
data.tar.gz: e204ea9b3158aa7ee5d8315a8b4068555a7913fe6ef36ec24b0fdabf5b4e64dabad9e5518c1193f1383345888332504495d3edd481fa3e097b76d455f599fe1d
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# 2.6.0
|
2
|
+
* Expose Lorekeeper::BacktraceCleaner
|
3
|
+
|
4
|
+
# 2.5.0
|
5
|
+
* Update the backtrace cleaner in JSONLogger to remove web server and stdlib lines, and to strip the Rails.root prefix
|
6
|
+
|
1
7
|
# 2.4.0
|
2
8
|
* Add `#with_level` method support added to the stdlib's Logger in [#85](https://github.com/ruby/logger/issues/85)
|
3
9
|
* Support symbol log level setting
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ When used without extra fields it outputs 20% faster than the standard Logger fo
|
|
10
10
|
Add this line to your application's Gemfile:
|
11
11
|
|
12
12
|
```ruby
|
13
|
-
gem 'lorekeeper', '~>
|
13
|
+
gem 'lorekeeper', '~> 2.0'
|
14
14
|
```
|
15
15
|
|
16
16
|
And then execute:
|
@@ -20,6 +20,15 @@ bundle
|
|
20
20
|
```
|
21
21
|
|
22
22
|
|
23
|
+
## Configuration
|
24
|
+
|
25
|
+
Configuration is set through environment variables.
|
26
|
+
|
27
|
+
- `LOREKEEPER_DENYLIST`
|
28
|
+
- A comma separated list of keywords/phrases that will be excluded from the clean backtrace.
|
29
|
+
- default: `newrelic_rpm, active_support/callbacks.rb, zipkin-tracer, puma, phusion_passenger, opentelemetry`
|
30
|
+
|
31
|
+
|
23
32
|
## Usage
|
24
33
|
|
25
34
|
### Normal logging methods
|
@@ -201,6 +210,14 @@ end
|
|
201
210
|
```
|
202
211
|
|
203
212
|
|
213
|
+
### Backtrace Cleaner
|
214
|
+
|
215
|
+
The backtrace cleaner can be used independently:
|
216
|
+
|
217
|
+
```ruby
|
218
|
+
Lorekeeper::BacktraceCleaner.instance.clean(backtrace)
|
219
|
+
```
|
220
|
+
|
204
221
|
|
205
222
|
## License
|
206
223
|
|
data/bin/console
CHANGED
File without changes
|
data/bin/setup
CHANGED
File without changes
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'singleton'
|
4
|
+
|
5
|
+
module Lorekeeper
|
6
|
+
class BacktraceCleaner
|
7
|
+
include Singleton
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@backtrace_cleaner = set_backtrace_cleaner
|
11
|
+
@rails_root = defined?(Rails.root) ? Rails.root.to_s : nil
|
12
|
+
@rails_root_size = @rails_root.to_s.size
|
13
|
+
@gem_path = defined?(Gem.path) ? Gem.path : []
|
14
|
+
@denylisted_fingerprint = denylisted_fingerprint
|
15
|
+
end
|
16
|
+
|
17
|
+
def clean(backtrace)
|
18
|
+
backtrace = filter_rails_root_backtrace(backtrace)
|
19
|
+
@backtrace_cleaner&.clean(backtrace) || backtrace
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
DENYLISTED_FINGERPRINT =
|
25
|
+
%r{newrelic_rpm|active_support/callbacks.rb|zipkin-tracer|puma|phusion_passenger|opentelemetry}.freeze
|
26
|
+
|
27
|
+
def denylisted_fingerprint
|
28
|
+
return DENYLISTED_FINGERPRINT unless ENV.key?('LOREKEEPER_DENYLIST')
|
29
|
+
|
30
|
+
/#{ENV.fetch('LOREKEEPER_DENYLIST').split(',').map(&:strip).join('|')}/
|
31
|
+
end
|
32
|
+
|
33
|
+
def filter_rails_root_backtrace(backtrace)
|
34
|
+
return backtrace unless @rails_root
|
35
|
+
|
36
|
+
last_index = nil
|
37
|
+
result = []
|
38
|
+
backtrace.each_with_index do |line, idx|
|
39
|
+
if line.start_with?(@rails_root) && @gem_path.none? { |path| line.start_with?(path) }
|
40
|
+
result << line[@rails_root_size..]
|
41
|
+
last_index = idx
|
42
|
+
else
|
43
|
+
result << line
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
last_index ? result[..last_index] : result
|
48
|
+
end
|
49
|
+
|
50
|
+
def set_backtrace_cleaner
|
51
|
+
return nil unless defined?(ActiveSupport::BacktraceCleaner)
|
52
|
+
|
53
|
+
cleaner = ActiveSupport::BacktraceCleaner.new
|
54
|
+
cleaner.remove_silencers!
|
55
|
+
cleaner.add_silencer do |line|
|
56
|
+
line.match?(@denylisted_fingerprint) || line.start_with?(RbConfig::CONFIG['rubylibdir'])
|
57
|
+
end
|
58
|
+
cleaner
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -9,7 +9,7 @@ module Lorekeeper
|
|
9
9
|
def initialize(file)
|
10
10
|
reset_state
|
11
11
|
@base_fields = { TIMESTAMP => '', MESSAGE => '', LEVEL => '' }
|
12
|
-
|
12
|
+
|
13
13
|
super(file)
|
14
14
|
end
|
15
15
|
|
@@ -113,19 +113,10 @@ module Lorekeeper
|
|
113
113
|
|
114
114
|
# Some instrumentation libraries pollute the stacktrace and create a large output which may
|
115
115
|
# cause problems with certain logging backends.
|
116
|
-
#
|
117
|
-
#
|
116
|
+
# Cleaner defaults to newrelic, active_support/callbacks, zipkin-tracer, opentelemetry, web servers,
|
117
|
+
# and stdlib now but can be configured by using LOREKEEPER_DENYLIST env var.
|
118
118
|
def clean_backtrace(backtrace)
|
119
|
-
|
120
|
-
end
|
121
|
-
|
122
|
-
def set_backtrace_cleaner
|
123
|
-
return nil unless defined?(ActiveSupport::BacktraceCleaner)
|
124
|
-
|
125
|
-
cleaner = ActiveSupport::BacktraceCleaner.new
|
126
|
-
cleaner.remove_silencers!
|
127
|
-
cleaner.add_silencer { |line| line.match?(BLACKLISTED_FINGERPRINT) }
|
128
|
-
cleaner
|
119
|
+
Lorekeeper::BacktraceCleaner.instance.clean(backtrace)
|
129
120
|
end
|
130
121
|
|
131
122
|
THREAD_KEY = 'lorekeeper_jsonlogger_key' # Shared by all threads but unique by thread
|
@@ -136,7 +127,6 @@ module Lorekeeper
|
|
136
127
|
EXCEPTION = 'exception'
|
137
128
|
STACK = 'stack'
|
138
129
|
DATA = 'data'
|
139
|
-
BLACKLISTED_FINGERPRINT = %r{newrelic_rpm|active_support/callbacks.rb|zipkin-tracer}.freeze
|
140
130
|
|
141
131
|
def with_extra_fields(fields)
|
142
132
|
state[:extra_fields] = fields
|
data/lib/lorekeeper/version.rb
CHANGED
data/lib/lorekeeper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lorekeeper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jordi Polo
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04
|
11
|
+
date: 2023-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oj
|
@@ -223,6 +223,7 @@ files:
|
|
223
223
|
- bin/console
|
224
224
|
- bin/setup
|
225
225
|
- lib/lorekeeper.rb
|
226
|
+
- lib/lorekeeper/backtrace_cleaner.rb
|
226
227
|
- lib/lorekeeper/fast_logger.rb
|
227
228
|
- lib/lorekeeper/json_logger.rb
|
228
229
|
- lib/lorekeeper/multi_logger.rb
|
@@ -233,7 +234,7 @@ homepage: https://github.com/JordiPolo/lorekeeper
|
|
233
234
|
licenses:
|
234
235
|
- MIT
|
235
236
|
metadata: {}
|
236
|
-
post_install_message:
|
237
|
+
post_install_message:
|
237
238
|
rdoc_options: []
|
238
239
|
require_paths:
|
239
240
|
- lib
|
@@ -248,8 +249,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
248
249
|
- !ruby/object:Gem::Version
|
249
250
|
version: '0'
|
250
251
|
requirements: []
|
251
|
-
rubygems_version: 3.
|
252
|
-
signing_key:
|
252
|
+
rubygems_version: 3.2.15
|
253
|
+
signing_key:
|
253
254
|
specification_version: 4
|
254
255
|
summary: Very fast JSON logger
|
255
256
|
test_files: []
|