request_headers_logger 0.0.4 → 1.0.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
- SHA1:
3
- metadata.gz: 470b462a8ffc11750785e8efc88d477d2efd61f5
4
- data.tar.gz: ff88013a271b1c3f21b9b91219007b3b6016a45a
2
+ SHA256:
3
+ metadata.gz: e7b41746047401b957cc85417b20f911cde79f6ae69ba703ec582941965c1650
4
+ data.tar.gz: 613329a86a1352f39f01a5a815d56813ccc7c1bf186c60610f4371f8895b8ce2
5
5
  SHA512:
6
- metadata.gz: 10084ec99b39e60ff233e5426ba82d6a47f021732dfc09780168cd966fb3940f45672386b92bfc47012212f77c341aa4e6ae74e7c2127d2cb70de6a3caba562d
7
- data.tar.gz: 83bdd44b690bccf5714590a14984c292efc2006c2d7c37036cab309b5aaa4ed11d0eecf1066ef09de0e37b8342b89d21005a315271036d3b28be26a1b9c299c8
6
+ metadata.gz: 512d286d34c872bb01134c8e1b5f55a793c9db473b57c1d3227a110d525ea1ada3c167619ab2445beea4a3945e8e616ab5b8e8090a5a262729b13603e708eaf8
7
+ data.tar.gz: e72953e00874b9ffa7154dd12bd04064357e43e391784022f57662bc60deb5da60c2830ef9067649ec6f3b4151f8c9f1ebacff15e1f3b0879adea7a8ae517eed
data/.gitignore CHANGED
@@ -13,3 +13,4 @@ rdoc
13
13
  spec/reports
14
14
  tmp
15
15
  .byebug_history
16
+ Gemfile.lock
@@ -8,12 +8,6 @@ rvm:
8
8
 
9
9
  before_install: gem install bundler
10
10
 
11
- script: bin/travis
12
-
13
- matrix:
14
- fast_finish: true
15
-
16
- env:
17
- matrix:
18
- - BUILD_TYPE=rspec
19
- - BUILD_TYPE=rubocop
11
+ script:
12
+ - bundle exec rspec
13
+ - bundle exec rubocop
data/README.md CHANGED
@@ -16,11 +16,11 @@ The gem can be used to share *RequestHeader* store items the asynchronous servic
16
16
 
17
17
  So how does it work with Rails.
18
18
 
19
- Add this line to your application's Gemfile:
19
+ Add this line to your application's Gemfile after the delayed job and message_queue gems:
20
20
 
21
- ``
21
+ ```ruby
22
22
  gem 'request_headers_logger'
23
- ``
23
+ ```
24
24
 
25
25
  And then execute:
26
26
 
@@ -33,11 +33,10 @@ That's it now Delayed job logs should show the *X-Request-Id* from the http requ
33
33
 
34
34
  ### Configure RequestHeadersLogger
35
35
 
36
- ```
37
- RequestHeadersLogger.configure do |config|
36
+ ```ruby
37
+ RequestHeadersLogger.configure do |config|
38
38
  config[:logger_format] = 'json' # Options [text json] default: text
39
39
  config[:tag_format] = 'key_val' # Options: [val key_val] default: val
40
- config[:Loggers] << MessageQueue.logger # List of all loggers used.
41
40
  end
42
41
  ```
43
42
 
@@ -45,6 +44,6 @@ end
45
44
 
46
45
  Per default the delayed job plug in applies a whitelist to only filter *X-Request-Id* header from the store. To white list new flags, you can do the following.
47
46
 
48
- ``
47
+ ```ruby
49
48
  RequestHeadersLogger.whitelist << "customer-id".to_sym
50
- ``
49
+ ```
@@ -6,6 +6,7 @@ require 'request_headers_logger/json_formatter'
6
6
  require 'request_headers_logger/text_formatter'
7
7
  require 'request_headers_logger/delayed_job/delayed_job'
8
8
  require 'request_headers_logger/message_queue/message_queue'
9
+ require 'request_headers_logger/railtie' if defined?(Rails)
9
10
 
10
11
  module RequestHeadersLogger # :nodoc:
11
12
  extend self
@@ -34,19 +35,13 @@ module RequestHeadersLogger # :nodoc:
34
35
  @configuration[:loggers]
35
36
  end
36
37
 
37
- def prepare_loggers
38
- loggers.each do |logger|
39
- logger_formatter logger
40
- end
41
- end
42
-
43
- private
44
-
45
38
  def logger_formatter(logger)
46
39
  logger.formatter ||= Logger::Formatter.new
47
40
  logger.formatter.extend formatter_class
48
41
  end
49
42
 
43
+ private
44
+
50
45
  def formatter_class
51
46
  RequestHeadersLogger.const_get("#{log_format.capitalize}Formatter")
52
47
  end
@@ -10,7 +10,6 @@ module RequestHeadersLogger
10
10
 
11
11
  CONFIG_KEYS = [
12
12
  :log_format, # [logger_format] default or json
13
- :loggers, # [Loggers] List of all loggers used.
14
13
  :tag_format, # [tag_format]
15
14
  ].freeze
16
15
 
@@ -20,7 +19,6 @@ module RequestHeadersLogger
20
19
  def initialize
21
20
  @configs = {
22
21
  log_format: LOG_FORMATS.first,
23
- loggers: [],
24
22
  tag_format: TAG_FORMATS.first
25
23
  }
26
24
  end
@@ -13,23 +13,12 @@ module RequestHeadersLogger
13
13
 
14
14
  lifecycle.before(:perform) do |worker, job|
15
15
  RequestHeadersMiddleware.store = job.payload_object.instance_variable_get(:@store)
16
- set_dj_loggers
17
16
  end
18
17
 
19
18
  lifecycle.after(:perform) do |worker, job|
20
19
  RequestHeadersMiddleware.store = {}
21
20
  end
22
21
  end
23
-
24
- def self.set_dj_loggers
25
- RequestHeadersLogger.configure do |config|
26
- loggers = [Delayed::Worker.logger]
27
- loggers << ::Rails.logger
28
-
29
- config[:loggers].push(loggers).flatten!.uniq!
30
- end
31
- RequestHeadersLogger.prepare_loggers
32
- end
33
22
  end
34
23
  end
35
24
 
@@ -24,21 +24,12 @@ module RequestHeadersLogger
24
24
  lifecycle.before(:consume) do |delivery_info, properties, payload|
25
25
  store = symbolize(properties.headers)&.dig(:store) || {}
26
26
  RequestHeadersMiddleware.store = store
27
-
28
- set_mq_loggers
29
27
  end
30
28
 
31
29
  lifecycle.after(:consume) do |delivery_info, properties, payload|
32
30
  RequestHeadersMiddleware.store = {}
33
31
  end
34
32
  end
35
-
36
- def self.set_mq_loggers
37
- RequestHeadersLogger.configure do |config|
38
- config[:loggers] << MessageQueue.logger
39
- end
40
- RequestHeadersLogger.prepare_loggers
41
- end
42
33
  end
43
34
  end
44
35
 
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RequestHeadersLogger
4
+ class Railtie < ::Rails::Railtie
5
+ config.after_initialize do
6
+ RequestHeadersLogger.logger_formatter(MessageQueue.logger) if defined?(MessageQueue)
7
+ if defined?(Delayed)
8
+ RequestHeadersLogger.logger_formatter(Delayed::Worker.logger)
9
+ RequestHeadersLogger.logger_formatter(Rails.logger)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -7,11 +7,22 @@ module RequestHeadersLogger
7
7
  def call(severity, time, progname, msg)
8
8
  format(::Logger::Formatter::Format,
9
9
  severity_name(severity)[0],
10
- format_datetime(time),
10
+ format_time(time),
11
11
  $PID,
12
12
  severity_name(severity),
13
13
  progname,
14
- msg2str("#{tags_text}#{msg}"))
14
+ "#{tags_text}#{to_string(msg)}")
15
+ end
16
+
17
+ def format_time(time)
18
+ return format_datetime(time) if respond_to? :format_datetime
19
+ time.strftime(@datetime_format || '%Y-%m-%dT%H:%M:%S.%6N ')
20
+ end
21
+
22
+ def to_string(msg)
23
+ return msg2str(msg) if respond_to? :format_datetime
24
+ return msg.inspect unless msg.is_a? String
25
+ msg
15
26
  end
16
27
 
17
28
  def severity_name(severity)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RequestHeadersLogger
4
- VERSION = '0.0.4'
4
+ VERSION = '1.0.0'
5
5
  end
@@ -41,21 +41,13 @@ RSpec.describe RequestHeadersLogger::Configuration do
41
41
  it 'return text as default for log_format' do
42
42
  expect(config[:log_format]).to eq('text')
43
43
  end
44
-
45
- it 'return empty array as default for loggers' do
46
- expect(config[:loggers]).to eq([])
47
- end
48
44
  end
49
45
 
50
46
  describe '[]=' do
51
47
  it 'assign valid config keys' do
52
- logger = Logger.new(STDOUT)
53
-
54
48
  config[:log_format] = 'json'
55
- config[:loggers] << logger
56
49
 
57
50
  expect(config[:log_format]).to eq('json')
58
- expect(config[:loggers].first).to eq(logger)
59
51
  end
60
52
 
61
53
  it 'raise an error for invalid configs ' do
@@ -4,42 +4,88 @@ require 'spec_helper'
4
4
 
5
5
  RSpec.describe RequestHeadersLogger::TextFormatter do
6
6
  let(:buffer) { StringIO.new }
7
- let(:logger) do
8
- logger = Logger.new(buffer)
9
- logger.progname = 'dummy'
10
- logger.formatter = Logger::Formatter.new
11
- logger.formatter.extend RequestHeadersLogger::TextFormatter
12
- logger
13
- end
14
7
 
15
- it 'output logs in a text format' do
16
- logger.info('text log message')
8
+ context 'Using a Logger::Formatter' do
9
+ let(:logger) do
10
+ logger = Logger.new(buffer)
11
+ logger.progname = 'dummy'
12
+ logger.formatter = Logger::Formatter.new
13
+ logger.formatter.extend RequestHeadersLogger::TextFormatter
14
+ logger
15
+ end
17
16
 
18
- expect(buffer.string).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: text log message$/)
19
- end
17
+ it 'output logs in a text format' do
18
+ logger.info('text log message')
20
19
 
21
- context 'store has some tags' do
22
- before do
23
- RequestHeadersMiddleware.store = { 'X-Request-Id': 'ef382618', 'tag': 'SSS' }
20
+ expect(buffer.string).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: text log message$/)
24
21
  end
25
22
 
26
- after do
27
- RequestHeadersMiddleware.store = {}
28
- RequestHeadersLogger.configure { |c| c[:tag_format] = 'val' }
23
+ context 'store has some tags' do
24
+ before do
25
+ RequestHeadersMiddleware.store = { 'X-Request-Id': 'ef382618', 'tag': 'SSS' }
26
+ end
27
+
28
+ after do
29
+ RequestHeadersMiddleware.store = {}
30
+ RequestHeadersLogger.configure { |c| c[:tag_format] = 'val' }
31
+ end
32
+
33
+ it 'output tags with key_val formmat' do
34
+ RequestHeadersLogger.configure { |c| c[:tag_format] = 'key_val' }
35
+ logger.info('text log message')
36
+ output = buffer.string
37
+
38
+ expect(output).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: \[X-Request-Id: ef382618\] text log message$/)
39
+ end
40
+
41
+ it 'include tags in the log line' do
42
+ logger.info('text log message')
43
+
44
+ expect(buffer.string).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: \[ef382618\] text log message$/)
45
+ end
46
+ end
47
+ end
48
+
49
+ context 'Using a Proc' do
50
+ let(:logger) do
51
+ logger = Logger.new(buffer)
52
+ logger.progname = 'dummy'
53
+ # rubocop:disable Metrics/LineLength
54
+ logger.formatter = proc { |severity, datetime, progname, msg| "[#{datetime} ##{Process.pid}] #{severity}: #{msg}\n" }
55
+ # rubocop:enable Metrics/LineLength
56
+ logger.formatter.extend RequestHeadersLogger::TextFormatter
57
+ logger
29
58
  end
30
59
 
31
- it 'output tags with key_val formmat' do
32
- RequestHeadersLogger.configure { |c| c[:tag_format] = 'key_val' }
60
+ it 'output logs in a text format' do
33
61
  logger.info('text log message')
34
- output = buffer.string
35
62
 
36
- expect(output).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: \[X-Request-Id: ef382618\] text log message$/)
63
+ expect(buffer.string).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: text log message$/)
37
64
  end
38
65
 
39
- it 'include tags in the log line' do
40
- logger.info('text log message')
66
+ context 'store has some tags' do
67
+ before do
68
+ RequestHeadersMiddleware.store = { 'X-Request-Id': 'ef382618', 'tag': 'SSS' }
69
+ end
70
+
71
+ after do
72
+ RequestHeadersMiddleware.store = {}
73
+ RequestHeadersLogger.configure { |c| c[:tag_format] = 'val' }
74
+ end
75
+
76
+ it 'output tags with key_val formmat' do
77
+ RequestHeadersLogger.configure { |c| c[:tag_format] = 'key_val' }
78
+ logger.info('text log message')
79
+ output = buffer.string
80
+
81
+ expect(output).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: \[X-Request-Id: ef382618\] text log message$/)
82
+ end
83
+
84
+ it 'include tags in the log line' do
85
+ logger.info('text log message')
41
86
 
42
- expect(buffer.string).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: \[ef382618\] text log message$/)
87
+ expect(buffer.string).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: \[ef382618\] text log message$/)
88
+ end
43
89
  end
44
90
  end
45
91
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: request_headers_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Al-waleed Shihadeh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-17 00:00:00.000000000 Z
11
+ date: 2018-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: request_headers_middleware
@@ -68,42 +68,42 @@ dependencies:
68
68
  name: rake
69
69
  requirement: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '12.0'
74
71
  - - ">="
75
72
  - !ruby/object:Gem::Version
76
73
  version: 12.0.0
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '12.0'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - "~>"
82
- - !ruby/object:Gem::Version
83
- version: '12.0'
84
81
  - - ">="
85
82
  - !ruby/object:Gem::Version
86
83
  version: 12.0.0
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: '12.0'
87
87
  - !ruby/object:Gem::Dependency
88
88
  name: rspec
89
89
  requirement: !ruby/object:Gem::Requirement
90
90
  requirements:
91
- - - "~>"
92
- - !ruby/object:Gem::Version
93
- version: '3.5'
94
91
  - - ">="
95
92
  - !ruby/object:Gem::Version
96
93
  version: 3.5.0
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.5'
97
97
  type: :development
98
98
  prerelease: false
99
99
  version_requirements: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '3.5'
104
101
  - - ">="
105
102
  - !ruby/object:Gem::Version
106
103
  version: 3.5.0
104
+ - - "~>"
105
+ - !ruby/object:Gem::Version
106
+ version: '3.5'
107
107
  - !ruby/object:Gem::Dependency
108
108
  name: rubocop
109
109
  requirement: !ruby/object:Gem::Requirement
@@ -135,8 +135,7 @@ dependencies:
135
135
  description: RequestHeaderLogger Allows you to tag logs with RequestHeader flags.
136
136
  email:
137
137
  - wshihadh@gmail.com
138
- executables:
139
- - travis
138
+ executables: []
140
139
  extensions: []
141
140
  extra_rdoc_files: []
142
141
  files:
@@ -145,11 +144,9 @@ files:
145
144
  - ".ruby-version"
146
145
  - ".travis.yml"
147
146
  - Gemfile
148
- - Gemfile.lock
149
147
  - LICENSE.txt
150
148
  - README.md
151
149
  - Rakefile
152
- - bin/travis
153
150
  - lib/request_headers_logger.rb
154
151
  - lib/request_headers_logger/configuration.rb
155
152
  - lib/request_headers_logger/delayed_job/delayed_job.rb
@@ -158,6 +155,7 @@ files:
158
155
  - lib/request_headers_logger/json_formatter.rb
159
156
  - lib/request_headers_logger/message_queue/message_queue.rb
160
157
  - lib/request_headers_logger/message_queue/message_queue_plugin.rb
158
+ - lib/request_headers_logger/railtie.rb
161
159
  - lib/request_headers_logger/text_formatter.rb
162
160
  - lib/request_headers_logger/version.rb
163
161
  - request_headers_logger.gemspec
@@ -188,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
186
  version: '0'
189
187
  requirements: []
190
188
  rubyforge_project:
191
- rubygems_version: 2.5.2
189
+ rubygems_version: 2.7.8
192
190
  signing_key:
193
191
  specification_version: 4
194
192
  summary: RequestHeaderLogger Allows you to tag logs with RequestHeader flags.
@@ -1,80 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- request_headers_logger (0.0.4)
5
- request_headers_middleware (~> 0.0.4)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- activesupport (5.1.5)
11
- concurrent-ruby (~> 1.0, >= 1.0.2)
12
- i18n (~> 0.7)
13
- minitest (~> 5.1)
14
- tzinfo (~> 1.1)
15
- ast (2.4.0)
16
- concurrent-ruby (1.0.5)
17
- delayed_job (4.1.4)
18
- activesupport (>= 3.0, < 5.2)
19
- diff-lcs (1.2.5)
20
- docile (1.1.5)
21
- i18n (0.9.5)
22
- concurrent-ruby (~> 1.0)
23
- json (2.1.0)
24
- minitest (5.11.3)
25
- parallel (1.12.1)
26
- parser (2.5.0.2)
27
- ast (~> 2.4.0)
28
- powerpack (0.1.1)
29
- rack (1.6.5)
30
- rainbow (3.0.0)
31
- rake (12.0.0)
32
- request_headers_middleware (0.0.4)
33
- request_store
34
- request_store (1.4.0)
35
- rack (>= 1.4)
36
- rspec (3.5.0)
37
- rspec-core (~> 3.5.0)
38
- rspec-expectations (~> 3.5.0)
39
- rspec-mocks (~> 3.5.0)
40
- rspec-core (3.5.4)
41
- rspec-support (~> 3.5.0)
42
- rspec-expectations (3.5.0)
43
- diff-lcs (>= 1.2.0, < 2.0)
44
- rspec-support (~> 3.5.0)
45
- rspec-mocks (3.5.0)
46
- diff-lcs (>= 1.2.0, < 2.0)
47
- rspec-support (~> 3.5.0)
48
- rspec-support (3.5.0)
49
- rubocop (0.53.0)
50
- parallel (~> 1.10)
51
- parser (>= 2.5)
52
- powerpack (~> 0.1)
53
- rainbow (>= 2.2.2, < 4.0)
54
- ruby-progressbar (~> 1.7)
55
- unicode-display_width (~> 1.0, >= 1.0.1)
56
- ruby-progressbar (1.9.0)
57
- simplecov (0.12.0)
58
- docile (~> 1.1.0)
59
- json (>= 1.8, < 3)
60
- simplecov-html (~> 0.10.0)
61
- simplecov-html (0.10.0)
62
- thread_safe (0.3.6)
63
- tzinfo (1.2.5)
64
- thread_safe (~> 0.1)
65
- unicode-display_width (1.3.0)
66
-
67
- PLATFORMS
68
- ruby
69
-
70
- DEPENDENCIES
71
- delayed_job (~> 4.1, >= 4.1.4)
72
- rack (~> 1.6, >= 1.6.5)
73
- rake (~> 12.0, >= 12.0.0)
74
- request_headers_logger!
75
- rspec (~> 3.5, >= 3.5.0)
76
- rubocop (~> 0.53.0)
77
- simplecov (~> 0.12.0)
78
-
79
- BUNDLED WITH
80
- 1.16.1
data/bin/travis DELETED
@@ -1,12 +0,0 @@
1
- #!/bin/sh
2
-
3
- set -e
4
-
5
- case "$BUILD_TYPE" in
6
- "rubocop")
7
- bundle exec rubocop
8
- ;;
9
- "rspec")
10
- bundle exec rspec
11
- ;;
12
- esac