ezlog 0.9.1 → 0.9.5

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: 887b24709271ea85b1b00a7de9d88ed253e7494e6b96d555afbabf7c88b84f02
4
- data.tar.gz: a9dd5994ed7e8a5562df8c17ecbe1ac1e790d5f90408cce82083f3ebf1e79be7
3
+ metadata.gz: 70fb33130f877332e30cbad096c74d1eeed80bba66f8c9ebedf0854f73bf95aa
4
+ data.tar.gz: 6bcb5959c18eb00a5065a86dd99ac02b193e8fb693cd195b201bdb07bc5e1fe4
5
5
  SHA512:
6
- metadata.gz: a5d03acb158fb0be072d425b107a67d397af02f3b6ffe54aac3d688b65d5ae65f15498c3b49208ff8f5414021a084099442aa947c06e96ba663ec740e05b971e
7
- data.tar.gz: 591cb4c0f959c5fefc2eb5a54d3550a5c99d74eb5317565d6c8dbf1707edfbaa8319cc8bc7e699613fd55a96b3ee5aff19d148469830b720469e7fdeb251ed35
6
+ metadata.gz: c9675aea648f31869dfc248199f05cae2dad3b62aed3352c9383d7626d70cf5a7a0c302b58ddb74f04c45c6177a64e94d46ed84dcf2af55f44eba3c0c22b83ae
7
+ data.tar.gz: '092a73292dd85f7e8bb918b01a2e972f6c828984aaaf1230f580b456134e94f428948e61212231ee9576b11d92b44cb706ce4f54af8fd735c1eb1074f2a90e67'
@@ -1,3 +1,47 @@
1
+ ### 0.9.5 (2020-10-1)
2
+
3
+ [Full Changelog](https://github.com/emartech/ezlog/compare/v0.9.4...v0.9.5)
4
+
5
+ * Fix
6
+ * fixing an issue with the Sidekiq job's log context generation:
7
+ using a namespaced Sidekiq worker (`SomeModule::SomeWorker`) cause the log context generations to fail with: `NameError: wrong constant name SomeModule::SomeWorker`
8
+
9
+ ### 0.9.4 (2020-09-26)
10
+
11
+ [Full Changelog](https://github.com/emartech/ezlog/compare/v0.9.3...v0.9.4)
12
+
13
+ * Features & enhancements
14
+ * added Ruby 2.7 to the list of version CI will test the code with
15
+ * remove dot-files and Rakefile from the gem
16
+ * Fix
17
+ * stop using `Hash#merge` with multiple arguments as it's only supported from Ruby 2.6
18
+
19
+ ### 0.9.3 (2020-09-20)
20
+
21
+ [Full Changelog](https://github.com/emartech/ezlog/compare/v0.9.2...v0.9.3)
22
+
23
+ * Features & enhancements
24
+ * Switching to [Oj](https://github.com/ohler55/oj) for fast JSON serialization
25
+ * Allow level to be formatted (so it can be logged as a number too)
26
+
27
+ if you want to use Ougai-like numbers you can do something like this:
28
+ ```ruby
29
+ config.ezlog.layout_options = { level_formatter: ->(level_number) { (level_number + 2) * 10 } }
30
+
31
+ Rails.logger.error('Boom!')
32
+ #=> {"logger":"Application","timestamp":"2020-09-20T19:29:03+02:00","level":50,"hostname":"BUD010256.local","pid":19872,"message":"Boom!"}
33
+ ```
34
+ * initial context (a context which will be added to every single line of log) can be configured via `config.ezlog.layout_options` and it defaults to `{environment: ::Rails.env}`
35
+
36
+ ### 0.9.2 (2020-09-19)
37
+
38
+ [Full Changelog](https://github.com/emartech/ezlog/compare/v0.9.1...v0.9.2)
39
+
40
+ * Features & enhancements
41
+ * Improvements of the [Sidekiq](https://github.com/mperham/sidekiq) integration
42
+ * supports additional job information: batch id, tags and thread id (bid, tags, tid)
43
+ * support logging "death" events (setting up a death_handler)
44
+
1
45
  ### 0.9.1 (2020-05-10)
2
46
 
3
47
  [Full Changelog](https://github.com/emartech/ezlog/compare/v0.9.0...v0.9.1)
@@ -16,13 +16,14 @@ Gem::Specification.new do |spec|
16
16
  }
17
17
 
18
18
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
19
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^((test|spec|features)/|Rakefile|\.)}) }
20
20
  end
21
21
  spec.bindir = "exe"
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ["lib"]
24
24
 
25
25
  spec.add_dependency "logging", "~> 2.0"
26
+ spec.add_dependency "oj", "~> 3.0"
26
27
 
27
28
  spec.add_development_dependency "bundler", "~> 2.0"
28
29
  spec.add_development_dependency "rake", ">= 12.3.3"
@@ -1,10 +1,11 @@
1
1
  require 'time'
2
- require 'json'
2
+ require 'oj'
3
3
 
4
4
  module Ezlog
5
5
  class LoggingLayout < ::Logging::Layout
6
- def initialize(context = {})
6
+ def initialize(context = {}, options = {})
7
7
  @initial_context = context
8
+ @level_formatter = options.fetch(:level_formatter, ->(numeric_level) { ::Logging::LNAMES[numeric_level] })
8
9
  end
9
10
 
10
11
  def format(event)
@@ -12,7 +13,7 @@ module Ezlog
12
13
  add_initial_context_to log_entry
13
14
  add_logging_context_to log_entry
14
15
  add_event_information_to log_entry, event
15
- ::JSON.dump(log_entry) + "\n"
16
+ ::Oj.dump(log_entry, mode: :json) + "\n"
16
17
  end
17
18
 
18
19
  private
@@ -20,8 +21,8 @@ module Ezlog
20
21
  def basic_information_for(event)
21
22
  {
22
23
  'logger' => event.logger,
23
- 'timestamp' => event.time.iso8601,
24
- 'level' => ::Logging::LNAMES[event.level],
24
+ 'timestamp' => event.time.iso8601(3),
25
+ 'level' => @level_formatter.call(event.level),
25
26
  'hostname' => Socket.gethostname,
26
27
  'pid' => Process.pid
27
28
  }
@@ -46,17 +47,17 @@ module Ezlog
46
47
  when Hash
47
48
  obj
48
49
  else
49
- {message: obj}
50
+ { 'message' => obj }
50
51
  end
51
52
  end
52
53
 
53
54
  def exception_message_by(exception)
54
55
  {
55
- message: exception.message,
56
- error: {
57
- class: exception.class.name,
58
- message: exception.message,
59
- backtrace: exception.backtrace&.first(20)
56
+ 'message' => exception.message,
57
+ 'error' => {
58
+ 'class' => exception.class.name,
59
+ 'message' => exception.message,
60
+ 'backtrace' => exception.backtrace&.first(20)
60
61
  }
61
62
  }
62
63
  end
@@ -5,13 +5,17 @@ module Ezlog
5
5
  config.ezlog.log_only_whitelisted_params = false
6
6
  config.ezlog.whitelisted_params = [:controller, :action]
7
7
  config.ezlog.exclude_paths = []
8
+ config.ezlog.initial_context = { environment: ::Rails.env }
9
+ config.ezlog.layout_options = {}
8
10
 
9
11
  initializer "ezlog.initialize" do
10
12
  require "ezlog/rails/extensions"
11
13
  end
12
14
 
13
15
  initializer 'ezlog.configure_logging' do |app|
14
- ::Logging.logger.root.appenders = ::Logging.appenders.stdout 'stdout', layout: Ezlog::LoggingLayout.new(environment: ::Rails.env)
16
+ ::Logging.logger.root.appenders =
17
+ ::Logging.appenders.stdout 'stdout', layout: Ezlog::LoggingLayout.new(app.config.ezlog.initial_context,
18
+ app.config.ezlog.layout_options)
15
19
  ::Logging.logger.root.level = app.config.log_level
16
20
  end
17
21
 
@@ -67,6 +71,7 @@ module Ezlog
67
71
  config.options[:job_logger] = Ezlog::Sidekiq::JobLogger
68
72
  config.error_handlers << Ezlog::Sidekiq::ErrorLogger.new
69
73
  config.error_handlers.delete_if { |handler| handler.is_a? ::Sidekiq::ExceptionHandler::Logger }
74
+ config.death_handlers << Ezlog::Sidekiq::DeathLogger.new
70
75
  end
71
76
  end
72
77
 
@@ -1,5 +1,6 @@
1
1
  module Ezlog
2
2
  module Sidekiq
3
+ autoload :DeathLogger, 'ezlog/sidekiq/death_logger'
3
4
  autoload :ErrorLogger, 'ezlog/sidekiq/error_logger'
4
5
  autoload :JobContext, 'ezlog/sidekiq/job_context'
5
6
  autoload :JobLogger, 'ezlog/sidekiq/job_logger'
@@ -0,0 +1,15 @@
1
+ require 'sidekiq'
2
+
3
+ module Ezlog
4
+ module Sidekiq
5
+ class DeathLogger
6
+ include LogContextHelper
7
+
8
+ def call(job, error)
9
+ within_log_context(JobContext.from_job_hash(job)) do
10
+ ::Sidekiq.logger.error error
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -4,13 +4,18 @@ module Ezlog
4
4
  class << self
5
5
  def from_job_hash(job_hash)
6
6
  return {} if job_hash.nil?
7
- basic_info_from(job_hash).merge named_arguments_from(job_hash)
7
+ thread_info.merge(basic_info_from(job_hash)).merge(named_arguments_from(job_hash))
8
8
  end
9
9
 
10
10
  private
11
11
 
12
+ def thread_info
13
+ { tid: Thread.current['sidekiq_tid'] || (Thread.current.object_id ^ ::Process.pid).to_s(36) }
14
+ end
15
+
16
+
12
17
  def basic_info_from(job)
13
- {
18
+ h = {
14
19
  jid: job['jid'],
15
20
  queue: job['queue'],
16
21
  worker: job_class(job),
@@ -18,6 +23,9 @@ module Ezlog
18
23
  enqueued_at: job['enqueued_at'],
19
24
  run_count: (job['retry_count'] || -1) + 2
20
25
  }
26
+ h[:bid] = job['bid'] if job['bid']
27
+ h[:tags] = job['tags'] if job['tags']
28
+ h
21
29
  end
22
30
 
23
31
  def named_arguments_from(job)
@@ -29,7 +37,7 @@ module Ezlog
29
37
  end
30
38
 
31
39
  def method_parameters_of(job)
32
- Kernel.const_get(job_class(job).to_sym).instance_method(:perform).parameters
40
+ Kernel.const_get(job_class(job)).instance_method(:perform).parameters
33
41
  end
34
42
 
35
43
  def job_class(job)
@@ -1,3 +1,3 @@
1
1
  module Ezlog
2
- VERSION = '0.9.1'
2
+ VERSION = '0.9.5'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ezlog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zoltan Ormandi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-10 00:00:00.000000000 Z
11
+ date: 2020-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logging
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: oj
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -122,21 +136,17 @@ dependencies:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
138
  version: '5.0'
125
- description:
139
+ description:
126
140
  email:
127
141
  - zoltan.ormandi@emarsys.com
128
142
  executables: []
129
143
  extensions: []
130
144
  extra_rdoc_files: []
131
145
  files:
132
- - ".gitignore"
133
- - ".rspec"
134
- - ".travis.yml"
135
146
  - CHANGELOG.md
136
147
  - Gemfile
137
148
  - LICENSE.txt
138
149
  - README.md
139
- - Rakefile
140
150
  - bin/console
141
151
  - bin/setup
142
152
  - ezlog.gemspec
@@ -156,6 +166,7 @@ files:
156
166
  - lib/ezlog/rspec/helpers.rb
157
167
  - lib/ezlog/rspec/matchers.rb
158
168
  - lib/ezlog/sidekiq.rb
169
+ - lib/ezlog/sidekiq/death_logger.rb
159
170
  - lib/ezlog/sidekiq/error_logger.rb
160
171
  - lib/ezlog/sidekiq/job_context.rb
161
172
  - lib/ezlog/sidekiq/job_logger.rb
@@ -166,7 +177,7 @@ licenses:
166
177
  - MIT
167
178
  metadata:
168
179
  changelog_uri: https://github.com/emartech/ezlog/blob/master/CHANGELOG.md
169
- post_install_message:
180
+ post_install_message:
170
181
  rdoc_options: []
171
182
  require_paths:
172
183
  - lib
@@ -181,8 +192,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
192
  - !ruby/object:Gem::Version
182
193
  version: '0'
183
194
  requirements: []
184
- rubygems_version: 3.0.3
185
- signing_key:
195
+ rubygems_version: 3.1.2
196
+ signing_key:
186
197
  specification_version: 4
187
198
  summary: A zero-configuration logging solution for projects using Sidekiq, Rails,
188
199
  Sequel, etc.
data/.gitignore DELETED
@@ -1,13 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
-
10
- # rspec failure tracking
11
- .rspec_status
12
- .ruby-version
13
- Gemfile.lock
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format progress
2
- --color
3
- --require spec_helper
@@ -1,9 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.4.6
7
- - 2.5.5
8
- - 2.6.3
9
- before_install: gem install bundler -v 2.0.1
data/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec