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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6bd5031cdc39d67fc6409bbe9d71028129040f13abd8f30445e5b0c4f090a005
4
- data.tar.gz: 8d5e0699f794abd16aa2a2e11562085d538581c567af030bf7d3bd0e3e9bd304
3
+ metadata.gz: a0f3276d2ccd3726c5e46dee8275cee70124955d9b8764e371097324a4643713
4
+ data.tar.gz: c6ca8429d029135ba450f232d80a1406d4256a03193705ead871d39e7800698a
5
5
  SHA512:
6
- metadata.gz: a894bc14c69acadbacd0dded2ea7ce4d04f2e607e19ecec70c570160976a0c79b8a9513b1024e305066bf4490e84ac8cc2927cf7a096e9df80cde82fe5f2fabe
7
- data.tar.gz: 0415da3006d84de2b1804d3b2ac7e26d8f793617861a22c0a6eb71291c2d1071ff021b4859b9ee53d23b609bf66aaa4e7cef5e338d6fb9e6fb708fa874f5f197
6
+ metadata.gz: 706306f7722c755d2df86f76141a102d9da097b8bab2b64830fc1381652c64da5ba45bba31ed696773f641f4864bd2d1c06a91e191bfe1e4ea0192d3e56c0eac
7
+ data.tar.gz: 2136479ffe04455d9a56ba52fce097a182deb65c924a7a9f1a18e653eb49419a2063c895f72242c1ee581596bc95688f8f0759de175e3c7819e3e91346041ffe
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
- ## [Unreleased]
1
+ ## 0.2.0
2
2
 
3
- ## [0.1.0] - 2021-09-27
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
@@ -4,3 +4,11 @@ source "https://rubygems.org"
4
4
 
5
5
  # Specify your gem's dependencies in memolog.gemspec
6
6
  gemspec
7
+
8
+ gem "pry"
9
+ gem "rails"
10
+ gem "rake"
11
+ gem "rspec"
12
+ gem "rubocop-config-umbrellio"
13
+ gem "sentry-ruby"
14
+ gem "sidekiq"
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- memolog (0.1.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.4-x86_64-darwin)
113
+ nokogiri (1.12.5-x86_64-darwin)
114
114
  racc (~> 1.4)
115
- nokogiri (1.12.4-x86_64-linux)
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.11.0)
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 load process.
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
 
@@ -1,10 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- Memolog::Config = Struct.new(:formatter, :uuid_callable, :sentry_key, :log_size_limit) do
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.uuid_callable = -> { SecureRandom.uuid }
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
- if defined?(Rails::Railtie)
4
- require "memolog/railtie"
5
- end
3
+ class Memolog::Init
4
+ def call
5
+ init_rails!
6
+ init_sentry!
7
+ init_sidekiq!
8
+ end
6
9
 
7
- if defined?(Sentry::Scope)
8
- Sentry::Scope.prepend(Memolog::SentryScopeExtension)
9
- end
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
- if defined?(Sidekiq)
12
- Sidekiq.configure_server do |config|
13
- config.server_middleware do |chain|
14
- chain.prepend(Memolog::SentrySidekiqMiddleware)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Memolog
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
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
- autoload :VERSION, "memolog/version"
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
- attr_accessor :debug, :logdevs
18
-
19
- self.debug = false
20
- self.logdevs = []
21
+ @config = Memolog::Config.new
22
+ @logdevs = []
21
23
 
22
24
  def configure
23
- @config ||= Memolog::Config.new
24
- yield(@config) if block_given?
25
- @config
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] = Memolog.config.uuid_callable.call
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.1.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-27 00:00:00.000000000 Z
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: '0'
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: '0'
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: '0'
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: '0'
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: