memolog 0.1.0 → 0.2.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 -2
- data/Gemfile +8 -0
- data/Gemfile.lock +6 -6
- data/README.md +31 -1
- data/lib/memolog/config.rb +12 -3
- data/lib/memolog/init.rb +24 -10
- data/lib/memolog/version.rb +1 -1
- data/lib/memolog.rb +24 -23
- metadata +11 -109
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0f3276d2ccd3726c5e46dee8275cee70124955d9b8764e371097324a4643713
|
4
|
+
data.tar.gz: c6ca8429d029135ba450f232d80a1406d4256a03193705ead871d39e7800698a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 706306f7722c755d2df86f76141a102d9da097b8bab2b64830fc1381652c64da5ba45bba31ed696773f641f4864bd2d1c06a91e191bfe1e4ea0192d3e56c0eac
|
7
|
+
data.tar.gz: 2136479ffe04455d9a56ba52fce097a182deb65c924a7a9f1a18e653eb49419a2063c895f72242c1ee581596bc95688f8f0759de175e3c7819e3e91346041ffe
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
-
##
|
1
|
+
## 0.2.0
|
2
2
|
|
3
|
-
|
3
|
+
- Uprade gem due [CVE-2021-41098](https://github.com/advisories/GHSA-2rr5-8q37-2w7h)
|
4
|
+
- Add initializers config option, available initializers are [rails, sentry, sidekiq].
|
5
|
+
- Move debug option to config.
|
6
|
+
|
7
|
+
## 0.1.0
|
4
8
|
|
5
9
|
- Test version for publish and test workflow.
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
memolog (0.
|
5
|
-
logger
|
6
|
-
securerandom
|
4
|
+
memolog (0.2.0)
|
5
|
+
logger (~> 1.4.3)
|
6
|
+
securerandom (~> 0.1.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
@@ -110,9 +110,9 @@ GEM
|
|
110
110
|
minitest (5.14.4)
|
111
111
|
multipart-post (2.1.1)
|
112
112
|
nio4r (2.5.8)
|
113
|
-
nokogiri (1.12.
|
113
|
+
nokogiri (1.12.5-x86_64-darwin)
|
114
114
|
racc (~> 1.4)
|
115
|
-
nokogiri (1.12.
|
115
|
+
nokogiri (1.12.5-x86_64-linux)
|
116
116
|
racc (~> 1.4)
|
117
117
|
parallel (1.21.0)
|
118
118
|
parser (3.0.2.0)
|
@@ -177,7 +177,7 @@ GEM
|
|
177
177
|
rubocop-ast (>= 1.7.0, < 2.0)
|
178
178
|
ruby-progressbar (~> 1.7)
|
179
179
|
unicode-display_width (>= 1.4.0, < 3.0)
|
180
|
-
rubocop-ast (1.
|
180
|
+
rubocop-ast (1.12.0)
|
181
181
|
parser (>= 3.0.1.1)
|
182
182
|
rubocop-config-umbrellio (1.17.0.53)
|
183
183
|
rubocop (= 1.17.0)
|
data/README.md
CHANGED
@@ -20,10 +20,40 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
$ gem install memolog
|
22
22
|
|
23
|
+
## Configuration
|
24
|
+
|
25
|
+
Use this example during application initialization process (this example implement default values):
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
Memolog.configure do |config|
|
29
|
+
config.debug = false
|
30
|
+
config.formatter = ::Memolog::Formatter.new
|
31
|
+
config.initializers = %i[rails sentry sidekiq]
|
32
|
+
config.log_size_limit = 50_000
|
33
|
+
config.sentry_key = :memolog
|
34
|
+
config.uuid_callable = -> { SecureRandom.uuid }
|
35
|
+
end
|
36
|
+
|
37
|
+
Memolog.init!
|
38
|
+
```
|
39
|
+
|
40
|
+
Available options are:
|
41
|
+
- `debug` - set it to true if you need to leave Memolog.dump result outside `Memolog.run {}` block.
|
42
|
+
- `formatter` - setup your own formatter.
|
43
|
+
- `initializers` - define here what you want to initialize in `#init!` call.
|
44
|
+
- `log_size_limit` - max log length in Sentry event.
|
45
|
+
- `sentry_key` - key name in Sentry extra object.
|
46
|
+
- `uuid_callable` - Memolog add unique value to logs, here you can redefine uuid generation.
|
47
|
+
|
23
48
|
## Usage
|
24
49
|
|
50
|
+
Please call `Memolog.extend_logger(Rails.logger)` or any other logger you want to collect.
|
51
|
+
After that when error occured you can check your Sentry report and see `memolog` section with all
|
52
|
+
logs collected before error. Also there will be unique identifier to find logs behaviour on your
|
53
|
+
server or log collection system.
|
54
|
+
|
25
55
|
Memolog has init code for Rails (Middleware), Sentry (Extension) and Sidekiq (Middleware).
|
26
|
-
It implement all hacks on the
|
56
|
+
It implement all hacks on the `Memolog.init!` call.
|
27
57
|
Also you can add `Memolog.run {}` around logs you want to collect and release it with `Memolog.dump`
|
28
58
|
inside this block.
|
29
59
|
|
data/lib/memolog/config.rb
CHANGED
@@ -1,10 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
Memolog::Config = Struct.new(
|
3
|
+
Memolog::Config = Struct.new(
|
4
|
+
:debug,
|
5
|
+
:formatter,
|
6
|
+
:initializers,
|
7
|
+
:log_size_limit,
|
8
|
+
:sentry_key,
|
9
|
+
:uuid_callable,
|
10
|
+
) do
|
4
11
|
def initialize
|
12
|
+
self.debug = false
|
5
13
|
self.formatter = ::Memolog::Formatter.new
|
6
|
-
self.
|
7
|
-
self.sentry_key = :memolog
|
14
|
+
self.initializers = %i[rails sentry sidekiq]
|
8
15
|
self.log_size_limit = 50_000
|
16
|
+
self.sentry_key = :memolog
|
17
|
+
self.uuid_callable = -> { SecureRandom.uuid }
|
9
18
|
end
|
10
19
|
end
|
data/lib/memolog/init.rb
CHANGED
@@ -1,17 +1,31 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
class Memolog::Init
|
4
|
+
def call
|
5
|
+
init_rails!
|
6
|
+
init_sentry!
|
7
|
+
init_sidekiq!
|
8
|
+
end
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
+
private
|
11
|
+
|
12
|
+
def init_rails!
|
13
|
+
return unless defined?(Rails) && Memolog.config.initializers.include?(:rails)
|
14
|
+
require "memolog/railtie"
|
15
|
+
end
|
16
|
+
|
17
|
+
def init_sentry!
|
18
|
+
return unless defined?(Sentry::Scope) && Memolog.config.initializers.include?(:sentry)
|
19
|
+
Sentry::Scope.prepend(Memolog::SentryScopeExtension)
|
20
|
+
end
|
21
|
+
|
22
|
+
def init_sidekiq!
|
23
|
+
return unless defined?(Sidekiq) && Memolog.config.initializers.include?(:sidekiq)
|
10
24
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
25
|
+
Sidekiq.configure_server do |config|
|
26
|
+
config.server_middleware do |chain|
|
27
|
+
chain.prepend(Memolog::SentrySidekiqMiddleware)
|
28
|
+
end
|
15
29
|
end
|
16
30
|
end
|
17
31
|
end
|
data/lib/memolog/version.rb
CHANGED
data/lib/memolog.rb
CHANGED
@@ -2,52 +2,55 @@
|
|
2
2
|
|
3
3
|
require "logger"
|
4
4
|
require "securerandom"
|
5
|
+
require "stringio"
|
6
|
+
|
7
|
+
require "memolog/version"
|
8
|
+
require "memolog/config"
|
9
|
+
require "memolog/extension"
|
10
|
+
require "memolog/formatter"
|
11
|
+
require "memolog/init"
|
12
|
+
require "memolog/middleware"
|
13
|
+
require "memolog/sentry_scope_extension"
|
14
|
+
require "memolog/sentry_sidekiq_middleware"
|
5
15
|
|
6
16
|
module Memolog
|
7
17
|
extend self
|
8
18
|
|
9
|
-
|
10
|
-
autoload :Config, "memolog/config"
|
11
|
-
autoload :Extension, "memolog/extension"
|
12
|
-
autoload :Formatter, "memolog/formatter"
|
13
|
-
autoload :Middleware, "memolog/middleware"
|
14
|
-
autoload :SentryScopeExtension, "memolog/sentry_scope_extension"
|
15
|
-
autoload :SentrySidekiqMiddleware, "memolog/sentry_sidekiq_middleware"
|
19
|
+
attr_accessor :config, :logdevs
|
16
20
|
|
17
|
-
|
18
|
-
|
19
|
-
self.debug = false
|
20
|
-
self.logdevs = []
|
21
|
+
@config = Memolog::Config.new
|
22
|
+
@logdevs = []
|
21
23
|
|
22
24
|
def configure
|
23
|
-
|
24
|
-
|
25
|
-
|
25
|
+
yield(config) if block_given?
|
26
|
+
end
|
27
|
+
|
28
|
+
def init!
|
29
|
+
Memolog::Init.new.call
|
26
30
|
end
|
27
|
-
alias config configure
|
28
31
|
|
29
32
|
def extend_logger(other_logger)
|
30
33
|
other_logger.extend(Memolog::Extension)
|
31
34
|
other_logger.formatter = config.formatter
|
32
35
|
end
|
33
36
|
|
34
|
-
def logger
|
35
|
-
Thread.current[:memolog_logger] ||= Logger.new(nil, formatter: config.formatter)
|
36
|
-
end
|
37
|
-
|
38
37
|
def uuid
|
39
38
|
Thread.current[:memolog_uuid]
|
40
39
|
end
|
41
40
|
|
41
|
+
def logger
|
42
|
+
Thread.current[:memolog_logger] ||= Logger.new(nil, formatter: config.formatter)
|
43
|
+
end
|
44
|
+
|
42
45
|
def run
|
43
|
-
Thread.current[:memolog_uuid] =
|
46
|
+
Thread.current[:memolog_uuid] = config.uuid_callable.call
|
44
47
|
|
45
48
|
logdevs.push(StringIO.new)
|
46
49
|
logger.instance_variable_set(:@logdev, logdevs.last)
|
47
50
|
|
48
51
|
yield
|
49
52
|
ensure
|
50
|
-
logdevs.pop unless debug
|
53
|
+
logdevs.pop unless config.debug
|
51
54
|
end
|
52
55
|
|
53
56
|
def dump
|
@@ -59,5 +62,3 @@ module Memolog
|
|
59
62
|
logdevs.last.string.slice(beginning, config.log_size_limit)
|
60
63
|
end
|
61
64
|
end
|
62
|
-
|
63
|
-
require "memolog/init"
|
metadata
CHANGED
@@ -1,141 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: memolog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stepan Kirushkin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-09-
|
11
|
+
date: 2021-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logger
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.4.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.4.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: securerandom
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.1.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: pry
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rails
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rake
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rspec
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rubocop-config-umbrellio
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: sentry-ruby
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: sidekiq
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
40
|
+
version: 0.1.0
|
139
41
|
description: |2
|
140
42
|
Memolog is an in-memory logger, which extend any other logger.
|
141
43
|
Designed to work with Sentry.
|
@@ -173,7 +75,7 @@ licenses:
|
|
173
75
|
metadata:
|
174
76
|
homepage_uri: https://github.com/skirushkin/memolog
|
175
77
|
source_code_uri: https://github.com/skirushkin/memolog
|
176
|
-
changelog_uri: https://github.com/skirushkin/memolog
|
78
|
+
changelog_uri: https://github.com/skirushkin/memolog/blob/master/CHANGELOG.md
|
177
79
|
post_install_message:
|
178
80
|
rdoc_options: []
|
179
81
|
require_paths:
|