heavylog 0.0.9 → 0.0.10
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/.rubocop.yml +150 -0
- data/.travis.yml +2 -1
- data/Gemfile +3 -1
- data/Gemfile.lock +38 -22
- data/README.md +1 -1
- data/Rakefile +3 -1
- data/bin/console +1 -0
- data/heavylog.gemspec +8 -6
- data/lib/heavylog/formatters/json.rb +3 -1
- data/lib/heavylog/formatters/raw.rb +2 -0
- data/lib/heavylog/log_subscriber.rb +15 -14
- data/lib/heavylog/middleware.rb +5 -4
- data/lib/heavylog/ordered_options.rb +2 -1
- data/lib/heavylog/railtie.rb +2 -1
- data/lib/heavylog/request_logger.rb +1 -1
- data/lib/heavylog/sidekiq_exception_handler.rb +6 -4
- data/lib/heavylog/sidekiq_logger.rb +6 -3
- data/lib/heavylog/version.rb +3 -1
- data/lib/heavylog.rb +43 -34
- metadata +22 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a992292707767781335e5fcce642f511ab6fea56e4a35705a2f2e6048e244793
|
4
|
+
data.tar.gz: bf9022984632db4083c7d795aebb741a10e62756086914431a2713585c3c629c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ac6113b7e8713b2e41126ee8a0f0222cea62122eec546dfc10842fef836b5a7dd5ea801b5ebb502617869baf81b06ec42ae14341d7a863429995a96bdf55099
|
7
|
+
data.tar.gz: b1639aafc80823c3b4eadac964e6583fd25947bc4606e2047652422e1eca7713797fa820684ae8da8bdf5d2ec66d0d6e615c49b7e908f3f575c335220c2475b0
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-performance
|
3
|
+
|
4
|
+
AllCops:
|
5
|
+
TargetRubyVersion: 2.5
|
6
|
+
|
7
|
+
# # Commonly used screens these days easily fit more than 80 characters.
|
8
|
+
Metrics/LineLength:
|
9
|
+
Max: 120
|
10
|
+
|
11
|
+
# Too short methods lead to extraction of single-use methods, which can make
|
12
|
+
# the code easier to read (by naming things), but can also clutter the class
|
13
|
+
Metrics/MethodLength:
|
14
|
+
Max: 125
|
15
|
+
|
16
|
+
# The guiding principle of classes is SRP, SRP can't be accurately measured by LoC
|
17
|
+
Metrics/ClassLength:
|
18
|
+
Max: 1500
|
19
|
+
|
20
|
+
Metrics/AbcSize:
|
21
|
+
Max: 160
|
22
|
+
|
23
|
+
Metrics/CyclomaticComplexity:
|
24
|
+
Max: 45
|
25
|
+
|
26
|
+
Metrics/PerceivedComplexity:
|
27
|
+
Max: 45
|
28
|
+
|
29
|
+
Metrics/ParameterLists:
|
30
|
+
Max: 6
|
31
|
+
|
32
|
+
Metrics/ModuleLength:
|
33
|
+
Max: 125
|
34
|
+
|
35
|
+
Metrics/BlockLength:
|
36
|
+
Max: 45
|
37
|
+
Exclude:
|
38
|
+
- 'spec/**/*'
|
39
|
+
|
40
|
+
# Mixing the styles looks just silly.
|
41
|
+
Style/HashSyntax:
|
42
|
+
EnforcedStyle: ruby19_no_mixed_keys
|
43
|
+
Exclude:
|
44
|
+
- 'config/routes.rb'
|
45
|
+
|
46
|
+
# Single quotes being faster is hardly measurable and only affects parse time.
|
47
|
+
# Enforcing double quotes reduces the times where you need to change them
|
48
|
+
# when introducing an interpolation. Use single quotes only if their semantics
|
49
|
+
# are needed.
|
50
|
+
Style/StringLiterals:
|
51
|
+
EnforcedStyle: double_quotes
|
52
|
+
|
53
|
+
Style/StringLiteralsInInterpolation:
|
54
|
+
EnforcedStyle: double_quotes
|
55
|
+
|
56
|
+
# We do not need to support Ruby 1.9, so this is good to use.
|
57
|
+
Style/SymbolArray:
|
58
|
+
Enabled: true
|
59
|
+
|
60
|
+
# String#% is by far the least verbose and only object oriented variant.
|
61
|
+
Style/FormatString:
|
62
|
+
EnforcedStyle: percent
|
63
|
+
|
64
|
+
# Fail is an alias of raise. Avoid aliases, it's more cognitive load for no gain.
|
65
|
+
# The argument that fail should be used to abort the program is wrong too,
|
66
|
+
# there's Kernel#abort for that.
|
67
|
+
Style/SignalException:
|
68
|
+
EnforcedStyle: only_raise
|
69
|
+
|
70
|
+
# { ... } for multi-line blocks is okay, follow Weirichs rule instead:
|
71
|
+
# https://web.archive.org/web/20140221124509/http://onestepback.org/index.cgi/Tech/Ruby/BraceVsDoEnd.rdoc
|
72
|
+
Style/BlockDelimiters:
|
73
|
+
Enabled: false
|
74
|
+
|
75
|
+
# do / end blocks should be used for side effects,
|
76
|
+
# methods that run a block for side effects and have
|
77
|
+
# a useful return value are rare, assign the return
|
78
|
+
# value to a local variable for those cases.
|
79
|
+
Style/MethodCalledOnDoEndBlock:
|
80
|
+
Enabled: true
|
81
|
+
|
82
|
+
Style/Documentation:
|
83
|
+
Enabled: false
|
84
|
+
|
85
|
+
Style/MethodDefParentheses:
|
86
|
+
Enabled: true
|
87
|
+
|
88
|
+
Style/TrailingCommaInHashLiteral:
|
89
|
+
EnforcedStyleForMultiline: comma
|
90
|
+
|
91
|
+
Style/TrailingCommaInArrayLiteral:
|
92
|
+
EnforcedStyleForMultiline: comma
|
93
|
+
|
94
|
+
Style/NumericLiterals:
|
95
|
+
Enabled: false
|
96
|
+
|
97
|
+
Style/NumericPredicate:
|
98
|
+
EnforcedStyle: comparison
|
99
|
+
|
100
|
+
Style/ClassAndModuleChildren:
|
101
|
+
Enabled: false
|
102
|
+
|
103
|
+
Style/DoubleNegation:
|
104
|
+
Enabled: false
|
105
|
+
|
106
|
+
# Most readable form.
|
107
|
+
Layout/AlignHash:
|
108
|
+
EnforcedHashRocketStyle: table
|
109
|
+
EnforcedColonStyle: table
|
110
|
+
|
111
|
+
Layout/BlockEndNewline:
|
112
|
+
Enabled: false
|
113
|
+
|
114
|
+
# No space makes the method definition shorter and differentiates
|
115
|
+
# from a regular assignment.
|
116
|
+
Layout/SpaceAroundEqualsInParameterDefault:
|
117
|
+
EnforcedStyle: no_space
|
118
|
+
|
119
|
+
Layout/IndentationConsistency:
|
120
|
+
EnforcedStyle: normal
|
121
|
+
|
122
|
+
Layout/MultilineMethodCallIndentation:
|
123
|
+
EnforcedStyle: indented_relative_to_receiver
|
124
|
+
|
125
|
+
# Suppressing exceptions can be perfectly fine, and be it to avoid to
|
126
|
+
# explicitly type nil into the rescue since that's what you want to return,
|
127
|
+
# or suppressing LoadError for optional dependencies
|
128
|
+
Lint/HandleExceptions:
|
129
|
+
Enabled: false
|
130
|
+
|
131
|
+
# This is just silly. Calling the argument `other` in all cases makes no sense.
|
132
|
+
Naming/BinaryOperatorParameterName:
|
133
|
+
Enabled: false
|
134
|
+
|
135
|
+
Naming/UncommunicativeMethodParamName:
|
136
|
+
AllowedNames:
|
137
|
+
- io
|
138
|
+
- id
|
139
|
+
- to
|
140
|
+
- by
|
141
|
+
- on
|
142
|
+
- in
|
143
|
+
- at
|
144
|
+
- ip
|
145
|
+
- db
|
146
|
+
- x
|
147
|
+
- y
|
148
|
+
|
149
|
+
Bundler/OrderedGems:
|
150
|
+
Enabled: false
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source "https://rubygems.org"
|
2
4
|
|
3
|
-
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
5
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
4
6
|
|
5
7
|
# Specify your gem's dependencies in heavylog.gemspec
|
6
8
|
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
heavylog (0.0.
|
4
|
+
heavylog (0.0.9)
|
5
5
|
actionpack (>= 5)
|
6
6
|
activesupport (>= 5)
|
7
7
|
railties (>= 5)
|
@@ -10,53 +10,59 @@ PATH
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
12
12
|
specs:
|
13
|
-
actionpack (5.
|
14
|
-
actionview (= 5.
|
15
|
-
activesupport (= 5.
|
13
|
+
actionpack (5.2.2)
|
14
|
+
actionview (= 5.2.2)
|
15
|
+
activesupport (= 5.2.2)
|
16
16
|
rack (~> 2.0)
|
17
17
|
rack-test (>= 0.6.3)
|
18
18
|
rails-dom-testing (~> 2.0)
|
19
19
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
20
|
-
actionview (5.
|
21
|
-
activesupport (= 5.
|
20
|
+
actionview (5.2.2)
|
21
|
+
activesupport (= 5.2.2)
|
22
22
|
builder (~> 3.1)
|
23
23
|
erubi (~> 1.4)
|
24
24
|
rails-dom-testing (~> 2.0)
|
25
25
|
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
26
|
-
activesupport (5.
|
26
|
+
activesupport (5.2.2)
|
27
27
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
28
28
|
i18n (>= 0.7, < 2)
|
29
29
|
minitest (~> 5.1)
|
30
30
|
tzinfo (~> 1.1)
|
31
|
+
ast (2.4.0)
|
31
32
|
builder (3.2.3)
|
32
|
-
concurrent-ruby (1.
|
33
|
-
crass (1.0.
|
33
|
+
concurrent-ruby (1.1.4)
|
34
|
+
crass (1.0.4)
|
34
35
|
diff-lcs (1.3)
|
35
36
|
erubi (1.7.1)
|
36
|
-
i18n (1.
|
37
|
+
i18n (1.2.0)
|
37
38
|
concurrent-ruby (~> 1.0)
|
38
|
-
|
39
|
+
jaro_winkler (1.5.2)
|
40
|
+
loofah (2.2.3)
|
39
41
|
crass (~> 1.0.2)
|
40
42
|
nokogiri (>= 1.5.9)
|
41
|
-
method_source (0.9.
|
43
|
+
method_source (0.9.2)
|
42
44
|
mini_portile2 (2.3.0)
|
43
45
|
minitest (5.11.3)
|
44
|
-
nokogiri (1.8.
|
46
|
+
nokogiri (1.8.5)
|
45
47
|
mini_portile2 (~> 2.3.0)
|
46
|
-
|
47
|
-
|
48
|
+
parallel (1.17.0)
|
49
|
+
parser (2.6.3.0)
|
50
|
+
ast (~> 2.4.0)
|
51
|
+
rack (2.0.6)
|
52
|
+
rack-test (1.1.0)
|
48
53
|
rack (>= 1.0, < 3)
|
49
54
|
rails-dom-testing (2.0.3)
|
50
55
|
activesupport (>= 4.2.0)
|
51
56
|
nokogiri (>= 1.6)
|
52
57
|
rails-html-sanitizer (1.0.4)
|
53
58
|
loofah (~> 2.2, >= 2.2.2)
|
54
|
-
railties (5.
|
55
|
-
actionpack (= 5.
|
56
|
-
activesupport (= 5.
|
59
|
+
railties (5.2.2)
|
60
|
+
actionpack (= 5.2.2)
|
61
|
+
activesupport (= 5.2.2)
|
57
62
|
method_source
|
58
63
|
rake (>= 0.8.7)
|
59
|
-
thor (>= 0.
|
64
|
+
thor (>= 0.19.0, < 2.0)
|
65
|
+
rainbow (3.0.0)
|
60
66
|
rake (10.5.0)
|
61
67
|
request_store (1.4.1)
|
62
68
|
rack (>= 1.4)
|
@@ -73,19 +79,29 @@ GEM
|
|
73
79
|
diff-lcs (>= 1.2.0, < 2.0)
|
74
80
|
rspec-support (~> 3.7.0)
|
75
81
|
rspec-support (3.7.1)
|
76
|
-
|
82
|
+
rubocop (0.71.0)
|
83
|
+
jaro_winkler (~> 1.5.1)
|
84
|
+
parallel (~> 1.10)
|
85
|
+
parser (>= 2.6)
|
86
|
+
rainbow (>= 2.2.2, < 4.0)
|
87
|
+
ruby-progressbar (~> 1.7)
|
88
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
89
|
+
ruby-progressbar (1.10.1)
|
90
|
+
thor (0.20.3)
|
77
91
|
thread_safe (0.3.6)
|
78
92
|
tzinfo (1.2.5)
|
79
93
|
thread_safe (~> 0.1)
|
94
|
+
unicode-display_width (1.6.0)
|
80
95
|
|
81
96
|
PLATFORMS
|
82
97
|
ruby
|
83
98
|
|
84
99
|
DEPENDENCIES
|
85
|
-
bundler (~>
|
100
|
+
bundler (~> 2.0)
|
86
101
|
heavylog!
|
87
102
|
rake (~> 10.0)
|
88
103
|
rspec (~> 3.0)
|
104
|
+
rubocop (~> 0.71)
|
89
105
|
|
90
106
|
BUNDLED WITH
|
91
|
-
|
107
|
+
2.0.1
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Heavylog
|
1
|
+
# Heavylog [](https://travis-ci.org/krisrang/heavylog)
|
2
2
|
|
3
3
|
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/heavylog`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
4
|
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
data/heavylog.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
|
-
lib = File.expand_path("
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require "heavylog/version"
|
5
6
|
|
@@ -21,12 +22,13 @@ Gem::Specification.new do |spec|
|
|
21
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
23
|
spec.require_paths = ["lib"]
|
23
24
|
|
24
|
-
spec.add_development_dependency "bundler", "~>
|
25
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
25
26
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
27
|
spec.add_development_dependency "rspec", "~> 3.0"
|
28
|
+
spec.add_development_dependency "rubocop", "~> 0.71"
|
27
29
|
|
28
|
-
spec.add_runtime_dependency
|
29
|
-
spec.add_runtime_dependency
|
30
|
-
spec.add_runtime_dependency
|
31
|
-
spec.add_runtime_dependency
|
30
|
+
spec.add_runtime_dependency "actionpack", ">= 5"
|
31
|
+
spec.add_runtime_dependency "activesupport", ">= 5"
|
32
|
+
spec.add_runtime_dependency "railties", ">= 5"
|
33
|
+
spec.add_runtime_dependency "request_store", "~> 1.4"
|
32
34
|
end
|
@@ -1,14 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
require "action_pack"
|
5
|
+
require "active_support/core_ext/class/attribute"
|
6
|
+
require "active_support/log_subscriber"
|
7
|
+
require "request_store"
|
6
8
|
|
7
9
|
module Heavylog
|
8
10
|
class LogSubscriber < ActiveSupport::LogSubscriber
|
9
11
|
def process_action(event)
|
10
|
-
|
11
|
-
data = extract_request(event, payload)
|
12
|
+
data = extract_request(event)
|
12
13
|
RequestStore.store[:heavylog_request_data] = data
|
13
14
|
end
|
14
15
|
|
@@ -23,7 +24,7 @@ module Heavylog
|
|
23
24
|
|
24
25
|
private
|
25
26
|
|
26
|
-
def extract_request(event
|
27
|
+
def extract_request(event)
|
27
28
|
payload = event.payload
|
28
29
|
data = initial_data(payload)
|
29
30
|
data.merge!(extract_status(payload))
|
@@ -35,11 +36,11 @@ module Heavylog
|
|
35
36
|
|
36
37
|
def initial_data(payload)
|
37
38
|
{
|
38
|
-
method:
|
39
|
-
path:
|
40
|
-
format:
|
39
|
+
method: payload[:method],
|
40
|
+
path: extract_path(payload),
|
41
|
+
format: extract_format(payload),
|
41
42
|
controller: payload[:controller],
|
42
|
-
action:
|
43
|
+
action: payload[:action],
|
43
44
|
}
|
44
45
|
end
|
45
46
|
|
@@ -49,7 +50,7 @@ module Heavylog
|
|
49
50
|
end
|
50
51
|
|
51
52
|
def strip_query_string(path)
|
52
|
-
index = path.index(
|
53
|
+
index = path.index("?")
|
53
54
|
index ? path[0, index] : path
|
54
55
|
end
|
55
56
|
|
@@ -79,7 +80,7 @@ module Heavylog
|
|
79
80
|
|
80
81
|
def extract_runtimes(event, payload)
|
81
82
|
data = { duration: event.duration.to_f.round(2) }
|
82
|
-
[
|
83
|
+
%i[view_runtime db_runtime].each do |key|
|
83
84
|
data[key] = payload[key].to_f.round(2) if payload.key?(key)
|
84
85
|
end
|
85
86
|
data
|
data/lib/heavylog/middleware.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require "rack/body_proxy"
|
3
4
|
|
4
5
|
module Heavylog
|
5
6
|
class Middleware
|
@@ -9,8 +10,8 @@ module Heavylog
|
|
9
10
|
end
|
10
11
|
|
11
12
|
def call(env)
|
12
|
-
ignore = env[
|
13
|
-
|
13
|
+
ignore = env["PATH_INFO"] =~ @assets_regex
|
14
|
+
unless ignore
|
14
15
|
request = ActionDispatch::Request.new(env)
|
15
16
|
RequestStore.store[:heavylog_request_id] = request.uuid
|
16
17
|
RequestStore.store[:heavylog_request_start] = Time.now.iso8601
|
@@ -19,7 +20,7 @@ module Heavylog
|
|
19
20
|
|
20
21
|
@app.call(env)
|
21
22
|
ensure
|
22
|
-
Heavylog.finish
|
23
|
+
Heavylog.finish unless ignore
|
23
24
|
end
|
24
25
|
end
|
25
26
|
end
|
data/lib/heavylog/railtie.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Heavylog
|
3
4
|
class Railtie < Rails::Railtie
|
4
5
|
config.heavylog = Heavylog::OrderedOptions.new
|
5
6
|
config.heavylog.enabled = false
|
6
|
-
config.heavylog.path =
|
7
|
+
config.heavylog.path = "log/heavylog.log"
|
7
8
|
config.heavylog.message_limit = 1024 * 1024 * 50 # 50MB
|
8
9
|
config.heavylog.log_sidekiq = false
|
9
10
|
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Heavylog
|
2
4
|
class SidekiqExceptionHandler
|
3
|
-
def call(
|
4
|
-
Heavylog.log(:warn, Sidekiq.dump_json(
|
5
|
-
Heavylog.log(:warn, "#{
|
6
|
-
Heavylog.log(:warn,
|
5
|
+
def call(exception, context)
|
6
|
+
Heavylog.log(:warn, Sidekiq.dump_json(context)) unless context.empty?
|
7
|
+
Heavylog.log(:warn, "#{exception.class.name}: #{exception.message}")
|
8
|
+
Heavylog.log(:warn, exception.backtrace.join("\n")) unless exception.backtrace.nil?
|
7
9
|
Heavylog.finish_sidekiq
|
8
10
|
end
|
9
11
|
end
|
@@ -1,7 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Heavylog
|
2
4
|
class SidekiqLogger
|
3
|
-
def call(item,
|
4
|
-
# item = {"class"=>"SuspiciousJob", "args"=>[12754545, [3858890], "invoice"], "retry"=>true, "queue"=>"default",
|
5
|
+
def call(item, _queue)
|
6
|
+
# item = {"class"=>"SuspiciousJob", "args"=>[12754545, [3858890], "invoice"], "retry"=>true, "queue"=>"default",
|
7
|
+
# "jid"=>"5ec968571e358497d70a3cf2", "created_at"=>1540484817.3950138, "enqueued_at"=>1540484817.395076}
|
5
8
|
|
6
9
|
Heavylog.log_sidekiq(item["jid"], item["class"], item["args"])
|
7
10
|
|
@@ -11,7 +14,7 @@ module Heavylog
|
|
11
14
|
yield
|
12
15
|
logger.info("done: #{elapsed(start)} sec")
|
13
16
|
Heavylog.finish_sidekiq
|
14
|
-
rescue
|
17
|
+
rescue StandardError
|
15
18
|
logger.info("fail: #{elapsed(start)} sec")
|
16
19
|
raise
|
17
20
|
end
|
data/lib/heavylog/version.rb
CHANGED
data/lib/heavylog.rb
CHANGED
@@ -1,18 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
2
|
+
|
3
|
+
require "heavylog/version"
|
4
|
+
require "heavylog/formatters/raw"
|
5
|
+
require "heavylog/formatters/json"
|
6
|
+
require "heavylog/log_subscriber"
|
7
|
+
require "heavylog/middleware"
|
8
|
+
require "heavylog/ordered_options"
|
9
|
+
require "heavylog/request_logger"
|
10
|
+
require "heavylog/sidekiq_logger"
|
11
|
+
require "heavylog/sidekiq_exception_handler"
|
11
12
|
|
12
13
|
module Heavylog
|
13
14
|
module_function
|
14
15
|
|
15
|
-
TRUNCATION =
|
16
|
+
TRUNCATION = "[TRUNCATED]"
|
16
17
|
|
17
18
|
mattr_accessor :logger, :application, :formatter, :log_level
|
18
19
|
|
@@ -26,15 +27,18 @@ module Heavylog
|
|
26
27
|
end
|
27
28
|
|
28
29
|
def patch_loggers
|
29
|
-
Rails.logger.extend(RequestLogger)
|
30
|
+
Rails.logger.extend(RequestLogger) if defined?(Rails)
|
30
31
|
end
|
31
32
|
|
32
33
|
def set_options
|
33
|
-
|
34
|
-
|
35
|
-
|
34
|
+
if config.path
|
35
|
+
f = File.open(config.path, "a")
|
36
|
+
f.binmode
|
37
|
+
f.sync = true
|
38
|
+
|
39
|
+
Heavylog.logger = ActiveSupport::Logger.new(f)
|
40
|
+
end
|
36
41
|
|
37
|
-
Heavylog.logger = ActiveSupport::Logger.new(f)
|
38
42
|
Heavylog.formatter = config.formatter || Heavylog::Formatters::Raw.new
|
39
43
|
Heavylog.log_level = config.log_level || :info
|
40
44
|
end
|
@@ -44,7 +48,7 @@ module Heavylog
|
|
44
48
|
end
|
45
49
|
|
46
50
|
def attach_to_sidekiq
|
47
|
-
return
|
51
|
+
return unless config.log_sidekiq
|
48
52
|
|
49
53
|
Sidekiq.configure_server do |config|
|
50
54
|
config.options[:job_logger] = SidekiqLogger
|
@@ -72,21 +76,24 @@ module Heavylog
|
|
72
76
|
end
|
73
77
|
end
|
74
78
|
|
75
|
-
def log(
|
76
|
-
return
|
79
|
+
def log(_severity, message=nil, progname=nil)
|
80
|
+
return unless config.enabled
|
77
81
|
return if !!RequestStore.store[:heavylog_truncated]
|
78
82
|
|
79
83
|
uuid = RequestStore.store[:heavylog_request_id]
|
80
|
-
return
|
84
|
+
return unless uuid
|
81
85
|
|
82
86
|
if message.nil?
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
87
|
+
message =
|
88
|
+
if block_given?
|
89
|
+
yield
|
90
|
+
else
|
91
|
+
progname
|
92
|
+
end
|
88
93
|
end
|
89
94
|
|
95
|
+
message = message.gsub(/\e\[(\d+)m/, "")
|
96
|
+
|
90
97
|
RequestStore.store[:heavylog_buffer] ||= StringIO.new
|
91
98
|
|
92
99
|
if RequestStore.store[:heavylog_buffer].length + message_size(message) > config.message_limit
|
@@ -99,7 +106,7 @@ module Heavylog
|
|
99
106
|
end
|
100
107
|
|
101
108
|
def log_sidekiq(jid, klass, args)
|
102
|
-
return
|
109
|
+
return unless config.enabled
|
103
110
|
|
104
111
|
RequestStore.store[:heavylog_request_id] = jid
|
105
112
|
RequestStore.store[:heavylog_request_start] = Time.now.iso8601
|
@@ -107,24 +114,24 @@ module Heavylog
|
|
107
114
|
|
108
115
|
RequestStore.store[:heavylog_request_data] = {
|
109
116
|
controller: "SidekiqLogger",
|
110
|
-
action:
|
111
|
-
args:
|
117
|
+
action: klass,
|
118
|
+
args: args.to_s,
|
112
119
|
}
|
113
120
|
|
114
121
|
RequestStore.store[:heavylog_buffer] ||= StringIO.new
|
115
122
|
end
|
116
123
|
|
117
124
|
def finish
|
118
|
-
return
|
125
|
+
return unless config.enabled
|
119
126
|
|
120
127
|
buffer = RequestStore.store[:heavylog_buffer]
|
121
|
-
return
|
128
|
+
return unless buffer && Heavylog.logger
|
122
129
|
|
123
130
|
request = {
|
124
|
-
request_id:
|
131
|
+
request_id: RequestStore.store[:heavylog_request_id],
|
125
132
|
request_start: RequestStore.store[:heavylog_request_start],
|
126
|
-
ip:
|
127
|
-
messages:
|
133
|
+
ip: RequestStore.store[:heavylog_request_ip],
|
134
|
+
messages: buffer.string.dup,
|
128
135
|
}.merge(RequestStore.store[:heavylog_request_data] || {})
|
129
136
|
|
130
137
|
formatted = Heavylog.formatter.call(request)
|
@@ -137,15 +144,17 @@ module Heavylog
|
|
137
144
|
end
|
138
145
|
|
139
146
|
def config
|
140
|
-
return OrderedOptions.new
|
147
|
+
return OrderedOptions.new unless application
|
148
|
+
|
141
149
|
application.config.heavylog
|
142
150
|
end
|
143
151
|
|
144
152
|
def message_size(message)
|
145
153
|
return message.bytesize if message.respond_to?(:bytesize)
|
146
154
|
return message.map(&:to_s).sum(&:bytesize) if message.is_a?(Array)
|
155
|
+
|
147
156
|
message.to_s.length
|
148
157
|
end
|
149
158
|
end
|
150
159
|
|
151
|
-
require
|
160
|
+
require "heavylog/railtie" if defined?(Rails)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: heavylog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kristjan Rang
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.0'
|
20
20
|
type: :development
|
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: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,7 +53,21 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.71'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.71'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: actionpack
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - ">="
|
@@ -67,7 +81,7 @@ dependencies:
|
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '5'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: activesupport
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
@@ -117,6 +131,7 @@ extra_rdoc_files: []
|
|
117
131
|
files:
|
118
132
|
- ".gitignore"
|
119
133
|
- ".rspec"
|
134
|
+
- ".rubocop.yml"
|
120
135
|
- ".travis.yml"
|
121
136
|
- Gemfile
|
122
137
|
- Gemfile.lock
|
@@ -157,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
172
|
version: '0'
|
158
173
|
requirements: []
|
159
174
|
rubyforge_project:
|
160
|
-
rubygems_version: 2.7.6
|
175
|
+
rubygems_version: 2.7.6.2
|
161
176
|
signing_key:
|
162
177
|
specification_version: 4
|
163
178
|
summary: Format all Rails logging per request
|