logged 0.1.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitlab-ci.yml +108 -0
- data/.rubocop.yml +405 -4
- data/CHANGELOG.md +42 -5
- data/Gemfile +2 -0
- data/README.md +0 -13
- data/Rakefile +2 -0
- data/lib/logged/configuration.rb +12 -6
- data/lib/logged/formatter/base.rb +2 -0
- data/lib/logged/formatter/json.rb +2 -0
- data/lib/logged/formatter/key_value.rb +2 -0
- data/lib/logged/formatter/logstash.rb +5 -1
- data/lib/logged/formatter/raw.rb +2 -0
- data/lib/logged/formatter/single_key.rb +4 -0
- data/lib/logged/level_conversion.rb +2 -0
- data/lib/logged/log_subscriber/action_controller.rb +20 -12
- data/lib/logged/log_subscriber/action_mailer.rb +21 -7
- data/lib/logged/log_subscriber/action_view.rb +5 -3
- data/lib/logged/log_subscriber/active_record.rb +3 -1
- data/lib/logged/log_subscriber/base.rb +4 -2
- data/lib/logged/logger.rb +6 -7
- data/lib/logged/rack/logger.rb +8 -6
- data/lib/logged/railtie.rb +2 -0
- data/lib/logged/subscriptions.rb +3 -3
- data/lib/logged/tagged_logging.rb +2 -0
- data/lib/logged/version.rb +3 -1
- data/lib/logged.rb +4 -2
- data/logged.gemspec +11 -6
- data/spec/Gemfile +8 -0
- metadata +89 -46
- data/.travis.yml +0 -15
data/lib/logged/formatter/raw.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'uri'
|
2
4
|
require 'logged/log_subscriber/base'
|
3
5
|
|
@@ -10,17 +12,7 @@ module Logged
|
|
10
12
|
def process_action(event)
|
11
13
|
return if ignore?(event, :info)
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
data = {
|
16
|
-
event: event.name
|
17
|
-
}
|
18
|
-
|
19
|
-
data.merge!(extract_request(payload))
|
20
|
-
data.merge!(cached_event_data)
|
21
|
-
data.merge!(extract_path(payload))
|
22
|
-
data.merge!(extract_status(payload))
|
23
|
-
data.merge!(extract_runtimes(payload))
|
15
|
+
data = process_action_data(event)
|
24
16
|
|
25
17
|
data[:duration] = event.duration.to_f.round(2)
|
26
18
|
|
@@ -75,7 +67,7 @@ module Logged
|
|
75
67
|
|
76
68
|
{
|
77
69
|
view_runtime: view_runtime,
|
78
|
-
db_runtime:
|
70
|
+
db_runtime: db_runtime
|
79
71
|
}.reject { |_k, v| v.blank? }
|
80
72
|
end
|
81
73
|
|
@@ -91,6 +83,22 @@ module Logged
|
|
91
83
|
filter: filter
|
92
84
|
}.reject { |_k, v| v.blank? }
|
93
85
|
end
|
86
|
+
|
87
|
+
def process_action_data(event)
|
88
|
+
data = {
|
89
|
+
event: event.name
|
90
|
+
}
|
91
|
+
|
92
|
+
payload = event.payload
|
93
|
+
|
94
|
+
data.merge!(extract_request(payload))
|
95
|
+
data.merge!(cached_event_data)
|
96
|
+
data.merge!(extract_path(payload))
|
97
|
+
data.merge!(extract_status(payload))
|
98
|
+
data.merge!(extract_runtimes(payload))
|
99
|
+
|
100
|
+
data
|
101
|
+
end
|
94
102
|
end
|
95
103
|
end
|
96
104
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'logged/log_subscriber/base'
|
2
4
|
|
3
5
|
module Logged
|
@@ -49,19 +51,31 @@ module Logged
|
|
49
51
|
private
|
50
52
|
|
51
53
|
def extract_mail_deliver(payload)
|
52
|
-
data =
|
53
|
-
mailer: (payload[:mailer] || Thread.current[:logged_action_mailer_process_mailer]),
|
54
|
-
action: (payload[:action] || Thread.current[:logged_action_mailer_process_action]),
|
55
|
-
from: Array(payload[:from]).join(', '),
|
56
|
-
to: Array(payload[:to]).join(', '),
|
57
|
-
bcc: Array(payload[:bcc]).join(', ')
|
58
|
-
}
|
54
|
+
data = mail_deliver_data(payload)
|
59
55
|
|
60
56
|
Thread.current[:logged_action_mailer_process_mailer] = nil
|
61
57
|
Thread.current[:logged_action_mailer_process_action] = nil
|
62
58
|
|
63
59
|
data
|
64
60
|
end
|
61
|
+
|
62
|
+
def mail_deliver_data(payload)
|
63
|
+
{
|
64
|
+
mailer: mail_deliver_data_thread_fallback(payload, :mailer),
|
65
|
+
action: mail_deliver_data_thread_fallback(payload, :action),
|
66
|
+
from: mail_deliver_data_array(payload, :from),
|
67
|
+
to: mail_deliver_data_array(payload, :to),
|
68
|
+
bcc: mail_deliver_data_array(payload, :bcc)
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
72
|
+
def mail_deliver_data_thread_fallback(payload, key)
|
73
|
+
payload[key] || Thread.current["logged_action_mailer_process_#{key}".to_sym]
|
74
|
+
end
|
75
|
+
|
76
|
+
def mail_deliver_data_array(payload, key)
|
77
|
+
Array(payload[key]).join(', ')
|
78
|
+
end
|
65
79
|
end
|
66
80
|
end
|
67
81
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'action_view/log_subscriber'
|
2
4
|
require 'logged/log_subscriber/base'
|
3
5
|
|
@@ -21,8 +23,8 @@ module Logged
|
|
21
23
|
|
22
24
|
debug(event, data)
|
23
25
|
end
|
24
|
-
|
25
|
-
|
26
|
+
alias render_partial render_template
|
27
|
+
alias render_collection render_template
|
26
28
|
|
27
29
|
protected
|
28
30
|
|
@@ -35,7 +37,7 @@ module Logged
|
|
35
37
|
end
|
36
38
|
|
37
39
|
def rails_root
|
38
|
-
@
|
40
|
+
@rails_root ||= "#{::Rails.root}/"
|
39
41
|
end
|
40
42
|
end
|
41
43
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_record/log_subscriber'
|
2
4
|
require 'logged/log_subscriber/base'
|
3
5
|
|
@@ -6,7 +8,7 @@ module Logged
|
|
6
8
|
# Log subscriber for ActiveRecord events
|
7
9
|
class ActiveRecord < Base
|
8
10
|
# This query types will be ignored
|
9
|
-
IGNORE_PAYLOAD_NAMES = %w
|
11
|
+
IGNORE_PAYLOAD_NAMES = %w[SCHEMA EXPLAIN].freeze
|
10
12
|
|
11
13
|
component :active_record
|
12
14
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support/log_subscriber'
|
2
4
|
|
3
5
|
module Logged
|
@@ -16,7 +18,7 @@ module Logged
|
|
16
18
|
|
17
19
|
private
|
18
20
|
|
19
|
-
%w
|
21
|
+
%w[info debug warn error fatal unknown].each do |level|
|
20
22
|
class_eval <<-METHOD, __FILE__, __LINE__ + 1
|
21
23
|
def #{level}(event, progname = nil, &block)
|
22
24
|
return unless logger
|
@@ -33,7 +35,7 @@ module Logged
|
|
33
35
|
end
|
34
36
|
|
35
37
|
def component
|
36
|
-
self.class.instance_variable_get(
|
38
|
+
self.class.instance_variable_get(:@component)
|
37
39
|
end
|
38
40
|
|
39
41
|
def ignore?(event, log_level = nil)
|
data/lib/logged/logger.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'logger'
|
2
4
|
require 'logged/tagged_logging'
|
3
5
|
|
@@ -7,6 +9,7 @@ module Logged
|
|
7
9
|
include TaggedLogging
|
8
10
|
|
9
11
|
attr_reader :loggers, :component
|
12
|
+
attr_writer :enabled
|
10
13
|
|
11
14
|
def initialize(loggers, component, formatter)
|
12
15
|
@loggers = loggers
|
@@ -33,9 +36,9 @@ module Logged
|
|
33
36
|
add_to_logger(level, event, data, logger, options)
|
34
37
|
end
|
35
38
|
end
|
36
|
-
|
39
|
+
alias log add
|
37
40
|
|
38
|
-
%w
|
41
|
+
%w[info debug warn error fatal unknown].each do |level|
|
39
42
|
class_eval <<-METHOD, __FILE__, __LINE__ + 1
|
40
43
|
def #{level}?
|
41
44
|
@loggers.keys.any? { |l| l.#{level}? }
|
@@ -48,7 +51,7 @@ module Logged
|
|
48
51
|
end
|
49
52
|
|
50
53
|
def close
|
51
|
-
@loggers.
|
54
|
+
@loggers.each_key do |logger|
|
52
55
|
logger.close if logger.respond_to?(:close)
|
53
56
|
end
|
54
57
|
end
|
@@ -63,10 +66,6 @@ module Logged
|
|
63
66
|
@enabled
|
64
67
|
end
|
65
68
|
|
66
|
-
def enabled=(enable)
|
67
|
-
@enabled = !!enable
|
68
|
-
end
|
69
|
-
|
70
69
|
def enable!
|
71
70
|
self.enabled = true
|
72
71
|
end
|
data/lib/logged/rack/logger.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support'
|
2
4
|
require 'action_dispatch'
|
3
5
|
|
@@ -14,10 +16,10 @@ module Logged
|
|
14
16
|
|
15
17
|
request = ActionDispatch::Request.new(env)
|
16
18
|
|
17
|
-
if loggers.
|
18
|
-
loggers_tagged(loggers, request) { @app.call(env) }
|
19
|
-
else
|
19
|
+
if loggers.empty?
|
20
20
|
@app.call(env)
|
21
|
+
else
|
22
|
+
loggers_tagged(loggers, request) { @app.call(env) }
|
21
23
|
end
|
22
24
|
ensure
|
23
25
|
Thread.current[:logged_request_env] = nil
|
@@ -33,10 +35,10 @@ module Logged
|
|
33
35
|
logger = loggers.shift
|
34
36
|
tags = tags_for_component(logger.component, request)
|
35
37
|
|
36
|
-
if loggers.
|
37
|
-
tagged_block(logger, tags
|
38
|
+
if loggers.empty?
|
39
|
+
tagged_block(logger, tags, &block)
|
38
40
|
else
|
39
|
-
tagged_block(logger, tags) { block
|
41
|
+
tagged_block(logger, tags) { loggers_tagged(loggers, request, &block) }
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
data/lib/logged/railtie.rb
CHANGED
data/lib/logged/subscriptions.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Logged
|
2
4
|
# Railtie for logged
|
3
5
|
module Subscriptions
|
@@ -31,9 +33,7 @@ module Logged
|
|
31
33
|
|
32
34
|
events.each do |event|
|
33
35
|
ActiveSupport::Notifications.notifier.listeners_for("#{event}.#{component}").each do |listener|
|
34
|
-
if listener.instance_variable_get(
|
35
|
-
ActiveSupport::Notifications.unsubscribe listener
|
36
|
-
end
|
36
|
+
ActiveSupport::Notifications.unsubscribe listener if listener.instance_variable_get(:@delegate) == subscriber
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
data/lib/logged/version.rb
CHANGED
data/lib/logged.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'logged/version'
|
2
4
|
require 'logged/level_conversion'
|
3
5
|
require 'logged/logger'
|
@@ -16,7 +18,7 @@ module Logged
|
|
16
18
|
extend Logged::Subscriptions
|
17
19
|
|
18
20
|
# special keys which not represent a component
|
19
|
-
CONFIG_KEYS = Configuration::DEFAULT_VALUES.keys + [
|
21
|
+
CONFIG_KEYS = Configuration::DEFAULT_VALUES.keys + %i[loggers disable_rails_logging]
|
20
22
|
|
21
23
|
mattr_accessor :app, :config
|
22
24
|
|
@@ -61,7 +63,7 @@ module Logged
|
|
61
63
|
|
62
64
|
@component_loggers[key] = Logger.new(loggers, component, formatter)
|
63
65
|
end
|
64
|
-
|
66
|
+
alias [] logger_by_component
|
65
67
|
|
66
68
|
# loggers for component
|
67
69
|
def loggers_for(component)
|
data/logged.gemspec
CHANGED
@@ -1,17 +1,19 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
lib = File.expand_path('../lib', __FILE__)
|
3
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
6
|
require 'logged/version'
|
5
7
|
|
6
8
|
Gem::Specification.new do |spec|
|
7
|
-
rails_version = '>=
|
9
|
+
rails_version = '>= 5.0', '< 8.0'
|
8
10
|
|
9
11
|
spec.name = 'logged'
|
10
12
|
spec.version = Logged::VERSION
|
11
13
|
spec.authors = ['Florian Schwab']
|
12
14
|
spec.email = ['me@ydkn.de']
|
13
|
-
spec.summary =
|
14
|
-
spec.homepage = 'https://
|
15
|
+
spec.summary = 'Better logging for rails'
|
16
|
+
spec.homepage = 'https://gitlab.com/ydkn/logged'
|
15
17
|
spec.license = 'MIT'
|
16
18
|
|
17
19
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -19,9 +21,12 @@ Gem::Specification.new do |spec|
|
|
19
21
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
22
|
spec.require_paths = ['lib']
|
21
23
|
|
22
|
-
spec.add_development_dependency 'bundler'
|
23
|
-
spec.add_development_dependency 'rake'
|
24
|
-
spec.add_development_dependency 'rspec'
|
24
|
+
spec.add_development_dependency 'bundler'
|
25
|
+
spec.add_development_dependency 'rake'
|
26
|
+
spec.add_development_dependency 'rspec'
|
27
|
+
spec.add_development_dependency 'rubocop'
|
28
|
+
spec.add_development_dependency 'rubocop-performance'
|
29
|
+
spec.add_development_dependency 'rubocop-rails'
|
25
30
|
spec.add_development_dependency 'rails', rails_version
|
26
31
|
spec.add_development_dependency 'actionpack', rails_version
|
27
32
|
spec.add_development_dependency 'actionview', rails_version
|