loggery 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/.gitignore +2 -0
- data/.rubocop.yml +11 -2
- data/.travis.yml +9 -0
- data/Appraisals +17 -0
- data/README.md +7 -1
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/rails4.2.gemfile +7 -0
- data/gemfiles/rails5.0.gemfile +7 -0
- data/gemfiles/rails5.1.gemfile +7 -0
- data/gemfiles/rails5.2.gemfile +7 -0
- data/lib/loggery.rb +5 -4
- data/lib/loggery/controller/logging_context.rb +3 -0
- data/lib/loggery/gem/version.rb +1 -1
- data/lib/loggery/metadata/logstash_event_util.rb +9 -10
- data/lib/loggery/metadata/middleware/rack.rb +1 -1
- data/lib/loggery/metadata/middleware/sidekiq.rb +31 -9
- data/lib/loggery/railtie.rb +3 -0
- data/lib/loggery/util.rb +6 -6
- data/loggery-gem.gemspec +6 -2
- metadata +68 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 51aab323d0268f155d0cb2d3b4706a72409dda2d
|
4
|
+
data.tar.gz: f576a02b4fcebb0a6136cc471f546613177ec4e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70609887ea649f271a3d362be6dd3b6adce2bbbccd1a3f2ccaf05e65b7a7efe756ee4dbaccaa079d49c1d6d72fad1d861fe4cf41f25056b0e29bd40cc593898a
|
7
|
+
data.tar.gz: 9e39ac654b31a0b58778a86b1db32eabd17177af5b066d1ec87c45d78181eba90894a25a2e3599bc071f9f9913a8efae07325b1e1779b7f344e443da663c8b1b
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -7,8 +7,9 @@ Style/StringLiterals:
|
|
7
7
|
Metrics/LineLength:
|
8
8
|
Max: 120
|
9
9
|
|
10
|
-
|
10
|
+
Metrics/BlockLength:
|
11
11
|
Exclude:
|
12
|
+
- loggery-gem.gemspec
|
12
13
|
- 'spec/**/*.rb'
|
13
14
|
|
14
15
|
Documentation:
|
@@ -17,5 +18,13 @@ Documentation:
|
|
17
18
|
Style/Lambda:
|
18
19
|
EnforcedStyle: literal
|
19
20
|
|
20
|
-
|
21
|
+
Metrics/MethodLength:
|
21
22
|
Max: 20
|
23
|
+
|
24
|
+
Style/FrozenStringLiteralComment:
|
25
|
+
Exclude:
|
26
|
+
- gemfiles/**/*
|
27
|
+
|
28
|
+
Layout/AlignHash:
|
29
|
+
EnforcedColonStyle: table
|
30
|
+
EnforcedHashRocketStyle: table
|
data/.travis.yml
CHANGED
@@ -2,6 +2,15 @@ sudo: false
|
|
2
2
|
language: ruby
|
3
3
|
rvm:
|
4
4
|
- 2.4.2
|
5
|
+
gemfile:
|
6
|
+
- gemfiles/rails4.2.gemfile
|
7
|
+
- gemfiles/rails5.0.gemfile
|
8
|
+
- gemfiles/rails5.1.gemfile
|
9
|
+
- gemfiles/rails5.2.gemfile
|
10
|
+
before_install:
|
11
|
+
- rvm use @global
|
12
|
+
- gem uninstall bundler -x
|
13
|
+
- gem install -v 1.17.2 bundler --no-rdoc --no-ri
|
5
14
|
script:
|
6
15
|
- bundle exec rubocop
|
7
16
|
- bundle exec rspec
|
data/Appraisals
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
appraise "rails4.2" do
|
4
|
+
gem "rails", "~> 4.2.0"
|
5
|
+
end
|
6
|
+
|
7
|
+
appraise "rails5.0" do
|
8
|
+
gem "rails", "~> 5.0.0"
|
9
|
+
end
|
10
|
+
|
11
|
+
appraise "rails5.1" do
|
12
|
+
gem "rails", "~> 5.1.0"
|
13
|
+
end
|
14
|
+
|
15
|
+
appraise "rails5.2" do
|
16
|
+
gem "rails", "5.2.0.beta2"
|
17
|
+
end
|
data/README.md
CHANGED
@@ -24,11 +24,17 @@ And then execute:
|
|
24
24
|
$ bundle
|
25
25
|
|
26
26
|
### Basic Rails integration
|
27
|
+
|
28
|
+
To enable, add
|
29
|
+
|
27
30
|
```ruby
|
28
31
|
config.loggery.enabled = true
|
29
32
|
```
|
30
33
|
|
31
|
-
to your `config/application.rb
|
34
|
+
to your `config/application.rb` or to the environment specific `config/staging.rb` and/or
|
35
|
+
`config/production.rb`.
|
36
|
+
|
37
|
+
In this basic setup, Loggery will save your log output to
|
32
38
|
`log/logstash-<rails-env>.log` in JSON format. It will also:
|
33
39
|
* use [lograge](https://github.com/roidrage/lograge) to create a single-line log entry for every
|
34
40
|
Rails request including the db / view / total duration, controller name, action, http status, etc...
|
data/lib/loggery.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "lograge"
|
4
|
+
require "logstash-event"
|
5
|
+
require "logstash-logger"
|
6
|
+
require "rails"
|
7
|
+
|
3
8
|
require "loggery/gem/version"
|
4
9
|
require "loggery/util"
|
5
10
|
require "loggery/controller/logging_context"
|
@@ -11,10 +16,6 @@ require "loggery/metadata/middleware/rack"
|
|
11
16
|
require "loggery/metadata/middleware/sidekiq"
|
12
17
|
require "loggery/railtie"
|
13
18
|
|
14
|
-
require "lograge"
|
15
|
-
require "logstash-event"
|
16
|
-
require "logstash-logger"
|
17
|
-
|
18
19
|
module Loggery
|
19
20
|
def self.setup_sidekiq
|
20
21
|
Loggery::Sidekiq::Setup.setup
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "active_support/concern"
|
4
|
+
|
3
5
|
# Provides a hook in Rails controllers that allows enriching log lines from within a Rails request
|
4
6
|
# with data that is available only within a controller action, for instance user information.
|
5
7
|
|
@@ -19,6 +21,7 @@ module Loggery
|
|
19
21
|
|
20
22
|
def loggery_set_metadata
|
21
23
|
return unless Loggery::Metadata::Store.store
|
24
|
+
|
22
25
|
metadata = loggery_default_metadata.merge loggery_log_context
|
23
26
|
Loggery::Metadata::Store.store.merge!(metadata)
|
24
27
|
end
|
data/lib/loggery/gem/version.rb
CHANGED
@@ -6,33 +6,32 @@
|
|
6
6
|
module Loggery
|
7
7
|
module Metadata
|
8
8
|
module LogstashEventUtil
|
9
|
-
|
9
|
+
MAGIC_FIELDS = %i[type uid _id _type _source _all _parent _fieldnames _routing
|
10
|
+
_index _size _timestamp _ttl].freeze
|
10
11
|
|
11
|
-
|
12
|
-
_index _size _timestamp _ttl }.freeze
|
13
|
-
|
14
|
-
def event_metadata(event)
|
12
|
+
def self.event_metadata(event)
|
15
13
|
return unless loglevel_includes_event?(event)
|
14
|
+
|
16
15
|
stored_metadata = Loggery::Metadata::Store.store || {}
|
17
16
|
metadata = default_metadata.merge(stored_metadata)
|
18
17
|
set_logstash_event_metadata(event, metadata)
|
19
18
|
end
|
20
19
|
|
21
|
-
def set_logstash_event_metadata(event, metadata)
|
20
|
+
def self.set_logstash_event_metadata(event, metadata)
|
22
21
|
metadata.each { |k, v| event[k] = v }
|
23
22
|
fail_if_magic_fields_are_used(event)
|
24
23
|
end
|
25
24
|
|
26
|
-
def default_metadata
|
25
|
+
def self.default_metadata
|
27
26
|
{ pid: Process.pid }
|
28
27
|
end
|
29
28
|
|
30
|
-
def loglevel_includes_event?(event)
|
31
|
-
severity = event[
|
29
|
+
def self.loglevel_includes_event?(event)
|
30
|
+
severity = event["severity"].downcase
|
32
31
|
Rails.logger.respond_to?(severity) && Rails.logger.public_send("#{severity}?")
|
33
32
|
end
|
34
33
|
|
35
|
-
def fail_if_magic_fields_are_used(event)
|
34
|
+
def self.fail_if_magic_fields_are_used(event)
|
36
35
|
MAGIC_FIELDS.each do |magic_field|
|
37
36
|
if event[magic_field.to_s].present? || event[magic_field.to_sym].present?
|
38
37
|
raise "'#{magic_field}' is a reserved field name of logstash. It should not be set in a custom event"
|
@@ -13,15 +13,12 @@ module Loggery
|
|
13
13
|
attr_accessor(:error_handler) { ->(e) { Sidekiq::Logging.logger.error(e) } }
|
14
14
|
end
|
15
15
|
|
16
|
-
def call(_worker,
|
17
|
-
Loggery::Metadata::Store.with_metadata(
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
retry_count: msg["retry_count"],
|
23
|
-
worker_type: "sidekiq") do
|
24
|
-
log_job_runtime(:sidekiq_job, "#{msg['class']} (#{msg['args']})") do
|
16
|
+
def call(_worker, message, queue)
|
17
|
+
Loggery::Metadata::Store.with_metadata(build_metadata(message, queue)) do
|
18
|
+
job_instance_name = "#{message['class']} (#{message['args']})"
|
19
|
+
log_job_start(message, job_instance_name)
|
20
|
+
|
21
|
+
log_job_runtime(:sidekiq_job, job_instance_name) do
|
25
22
|
begin
|
26
23
|
yield
|
27
24
|
rescue StandardError => e
|
@@ -33,6 +30,31 @@ module Loggery
|
|
33
30
|
end
|
34
31
|
end
|
35
32
|
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def build_metadata(message, queue)
|
37
|
+
{
|
38
|
+
jid: message["jid"],
|
39
|
+
thread_id: Thread.current.object_id.to_s(36),
|
40
|
+
worker: message["class"],
|
41
|
+
args: message["args"].inspect,
|
42
|
+
queue: queue,
|
43
|
+
retry_count: message["retry_count"],
|
44
|
+
worker_type: "sidekiq"
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def log_job_start(message, job_instance_name)
|
49
|
+
execution_delay =
|
50
|
+
(Time.current - Time.zone.at(message["enqueued_at"]) if message["enqueued_at"])
|
51
|
+
|
52
|
+
Rails.logger.info(
|
53
|
+
event_type: :sidekiq_job_started,
|
54
|
+
message: "Job type sidekiq_job - #{job_instance_name} started",
|
55
|
+
execution_delay: execution_delay
|
56
|
+
)
|
57
|
+
end
|
36
58
|
end
|
37
59
|
end
|
38
60
|
end
|
data/lib/loggery/railtie.rb
CHANGED
data/lib/loggery/util.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "active_support/core_ext/time/calculations"
|
4
|
+
|
3
5
|
module Loggery
|
4
6
|
module Util
|
5
|
-
def log_job_runtime(job_type, job_instance_name
|
6
|
-
job_name =
|
7
|
-
|
8
|
-
Rails.logger.info event_type: :"#{job_type}_started", message: "#{job_name} started"
|
7
|
+
def log_job_runtime(job_type, job_instance_name)
|
8
|
+
job_name = "Job type #{job_type} - #{job_instance_name}"
|
9
9
|
|
10
10
|
begin
|
11
11
|
start_time = Time.current
|
@@ -15,8 +15,8 @@ module Loggery
|
|
15
15
|
duration = end_time - start_time
|
16
16
|
|
17
17
|
Rails.logger.info event_type: :"#{job_type}_finished",
|
18
|
-
message:
|
19
|
-
duration:
|
18
|
+
message: "#{job_name} finished",
|
19
|
+
duration: duration
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
data/loggery-gem.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
lib = File.expand_path("
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
5
|
require "loggery/gem/version"
|
6
6
|
|
@@ -21,13 +21,17 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
+
spec.add_runtime_dependency "actionpack", ">= 4.2.0"
|
25
|
+
spec.add_runtime_dependency "activesupport", ">= 4.2.0"
|
24
26
|
spec.add_runtime_dependency "lograge", "~> 0.6"
|
25
27
|
spec.add_runtime_dependency "logstash-event", "~> 1.2"
|
26
28
|
spec.add_runtime_dependency "logstash-logger", "~> 0.25"
|
27
|
-
spec.add_runtime_dependency "
|
29
|
+
spec.add_runtime_dependency "railties", ">= 4.2.0"
|
28
30
|
|
31
|
+
spec.add_development_dependency "appraisal"
|
29
32
|
spec.add_development_dependency "bundler", "~> 1.14"
|
30
33
|
spec.add_development_dependency "pry-byebug"
|
34
|
+
spec.add_development_dependency "rails", ">= 4.2.0"
|
31
35
|
spec.add_development_dependency "rake", "~> 10.0"
|
32
36
|
spec.add_development_dependency "rspec"
|
33
37
|
spec.add_development_dependency "rubocop"
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loggery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Stemplinger
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: actionpack
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 4.2.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 4.2.0
|
13
41
|
- !ruby/object:Gem::Dependency
|
14
42
|
name: lograge
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,19 +81,33 @@ dependencies:
|
|
53
81
|
- !ruby/object:Gem::Version
|
54
82
|
version: '0.25'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
84
|
+
name: railties
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
58
86
|
requirements:
|
59
87
|
- - ">="
|
60
88
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
89
|
+
version: 4.2.0
|
62
90
|
type: :runtime
|
63
91
|
prerelease: false
|
64
92
|
version_requirements: !ruby/object:Gem::Requirement
|
65
93
|
requirements:
|
66
94
|
- - ">="
|
67
95
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
96
|
+
version: 4.2.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: appraisal
|
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'
|
69
111
|
- !ruby/object:Gem::Dependency
|
70
112
|
name: bundler
|
71
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +136,20 @@ dependencies:
|
|
94
136
|
- - ">="
|
95
137
|
- !ruby/object:Gem::Version
|
96
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rails
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 4.2.0
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 4.2.0
|
97
153
|
- !ruby/object:Gem::Dependency
|
98
154
|
name: rake
|
99
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -175,11 +231,17 @@ files:
|
|
175
231
|
- ".rspec"
|
176
232
|
- ".rubocop.yml"
|
177
233
|
- ".travis.yml"
|
234
|
+
- Appraisals
|
178
235
|
- CODE_OF_CONDUCT.md
|
179
236
|
- Gemfile
|
180
237
|
- LICENSE.txt
|
181
238
|
- README.md
|
182
239
|
- Rakefile
|
240
|
+
- gemfiles/.bundle/config
|
241
|
+
- gemfiles/rails4.2.gemfile
|
242
|
+
- gemfiles/rails5.0.gemfile
|
243
|
+
- gemfiles/rails5.1.gemfile
|
244
|
+
- gemfiles/rails5.2.gemfile
|
183
245
|
- lib/loggery.rb
|
184
246
|
- lib/loggery/controller/logging_context.rb
|
185
247
|
- lib/loggery/gem/version.rb
|
@@ -212,7 +274,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
274
|
version: '0'
|
213
275
|
requirements: []
|
214
276
|
rubyforge_project:
|
215
|
-
rubygems_version: 2.5.
|
277
|
+
rubygems_version: 2.5.2
|
216
278
|
signing_key:
|
217
279
|
specification_version: 4
|
218
280
|
summary: Generate logstash compatible log output from Rails apps.
|