rails_api_logger 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 436fe06f5a60eb0cfe6e341c526958b5d2e568ce44eb5e0d45fc704d8cc0151c
4
- data.tar.gz: b633e7b6ff50358f91f6096adaa0d693f5e39144316af68e6b821f06bf0858cc
3
+ metadata.gz: b613afbb5fea833002c8cefd748428314e45df42344a41aacf0230aa7cdd9ffa
4
+ data.tar.gz: 28ed28bde3d2aacfeee818600fb336d06355b0acbfab26cddd2ba779585dcb90
5
5
  SHA512:
6
- metadata.gz: e17c8a4a95a6ef87c497257e5da27ed41b81fe9fede8b44767eeadaf8335ab68a63d15d6a27436dac72da6a3316b670927c72b3d7cb60a32a73361c8148e7654
7
- data.tar.gz: 914a5cd684eac764b416441f1e1f1a78318e3e0eb68a842620a4f4a7f867d94aebe06fea37faceb49a8a4aa25b349748ef1c14bdae9bcb1e71972a6a69c05195
6
+ metadata.gz: 8e435ae3d44e5be4307ba6fa8239687ba2f95a6dba1841d857305cdb6f7c6d5471e07b9cab659e35ea432d9e76eb6f62658be24ee21582cef7cc52789aa5a6db
7
+ data.tar.gz: cb0e8be6fba1f7108a93e124f57c0e10998c8354da03759ce5607ca8b4dd0f4fcb3d1a83ee442303290792f03a15098610ce2188d452c494a8c76174d9d40fae
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rails_api_logger (0.1.1)
4
+ rails_api_logger (0.2.0)
5
5
  activerecord (>= 4.1.0)
6
6
  railties (>= 4.1.0)
7
7
 
@@ -38,16 +38,14 @@ GEM
38
38
  crass (1.0.6)
39
39
  diff-lcs (1.4.4)
40
40
  erubi (1.10.0)
41
- i18n (1.8.8)
41
+ i18n (1.8.9)
42
42
  concurrent-ruby (~> 1.0)
43
43
  loofah (2.9.0)
44
44
  crass (~> 1.0.2)
45
45
  nokogiri (>= 1.5.9)
46
46
  method_source (1.0.0)
47
- mini_portile2 (2.5.0)
48
- minitest (5.14.3)
49
- nokogiri (1.11.1)
50
- mini_portile2 (~> 2.5.0)
47
+ minitest (5.14.4)
48
+ nokogiri (1.11.1-x86_64-darwin)
51
49
  racc (~> 1.4)
52
50
  parallel (1.20.1)
53
51
  parser (3.0.0.0)
data/README.md CHANGED
@@ -77,23 +77,31 @@ This will guarantee that the log is always persisted, even in case of errors.
77
77
  ## Log Inbound Requests
78
78
 
79
79
  If you are exposing some API you might be interested in logging the requests you receive.
80
- You can do so in your controller by adding:
80
+ You can do so by adding this middleware in `config/application.rb`
81
81
 
82
82
  ```ruby
83
- around_action :log_inbound_request
83
+ config.middleware.insert_before Rails::Rack::Logger, InboundRequestLoggerMiddleware
84
84
  ```
85
85
 
86
- you can also log only requests that have an impact in your system with:
86
+ this will by default only log requests that have an impact in your system (POST, PUT, and PATCH calls).
87
+ If you want to log all requests (also GET ones) use
87
88
 
88
89
  ```ruby
89
- around_action :log_inbound_request, if: :request_with_state_change?
90
+ config.middleware.insert_before Rails::Rack::Logger, InboundRequestLoggerMiddleware, only_state_change: false
91
+ ```
92
+
93
+ If you want to log only requests on a certain path, you can pass a regular expression:
94
+
95
+ ```ruby
96
+ config.middleware.insert_before Rails::Rack::Logger, InboundRequestLoggerMiddleware, path_regexp: /api/
90
97
  ```
91
98
 
92
- this will create a log entry only for POST, PUT, and PATCH calls.
93
99
 
94
100
  In the implementation of your API, you can call any time `attach_inbound_request_loggable(model)`
95
101
  to attach an already persisted model to the log record.
96
102
 
103
+
104
+
97
105
  For example:
98
106
  ```ruby
99
107
 
@@ -4,6 +4,7 @@ require "rails_api_logger/request_log"
4
4
  require "rails_api_logger/inbound_request_log"
5
5
  require "rails_api_logger/outbound_request_log"
6
6
  require "rails_api_logger/inbound_requests_logger"
7
+ require "rails_api_logger/inbound_requests_logger_middleware"
7
8
 
8
9
  module RailsApiLogger
9
10
  class Error < StandardError; end
@@ -3,29 +3,11 @@ module InboundRequestsLogger
3
3
 
4
4
  private
5
5
 
6
- def log_inbound_request
7
- @inbound_request_log = InboundRequestLog.from_request(request)
8
- yield
9
- @inbound_request_log.update(response_body: JSON.parse(response.body), response_code: response.code)
10
- end
11
-
12
- def request_with_state_change?
13
- request.post? || request.put? || request.patch? || request.delete?
14
- end
15
-
16
- def request_without_body?
17
- request.get? || request.head? || request.options? || request.delete?
18
- end
19
-
20
6
  def attach_inbound_request_loggable(loggable)
21
- @inbound_request_log.loggable = loggable if loggable&.persisted?
7
+ request.env["inbound_request_log"].loggable = loggable if loggable&.persisted?
22
8
  end
23
9
  end
24
10
 
25
11
  ActiveSupport.on_load(:action_controller) do
26
12
  include InboundRequestsLogger
27
13
  end
28
-
29
- ActiveSupport.on_load(:action_controller_api) do
30
- include InboundRequestsLogger
31
- end
@@ -0,0 +1,47 @@
1
+ class InboundRequestLoggerMiddleware
2
+ attr_accessor :only_state_change, :path_regexp
3
+
4
+ def initialize(app, only_state_change: true, path_regexp: /.*/)
5
+ @app = app
6
+ self.only_state_change = only_state_change
7
+ self.path_regexp = path_regexp
8
+ end
9
+
10
+ def call(env)
11
+ request = ActionDispatch::Request.new(env)
12
+ if log?(request)
13
+ @inbound_request_log = InboundRequestLog.from_request(request)
14
+ env["inbound_request_log"] = @inbound_request_log
15
+ request.body.rewind
16
+ end
17
+ status, headers, body = @app.call(env)
18
+ if log?(request)
19
+ @inbound_request_log.update(response_body: parsed_body(body), response_code: status)
20
+ end
21
+ [status, headers, body]
22
+ end
23
+
24
+ private
25
+
26
+ def log?(request)
27
+ request.path =~ path_regexp && (!only_state_change || request_with_state_change?(request))
28
+ end
29
+
30
+ def parsed_body(body)
31
+ return unless body.present?
32
+
33
+ if body.respond_to?(:body)
34
+ JSON.parse(body.body)
35
+ elsif body.respond_to?(:[])
36
+ JSON.parse(body[0])
37
+ else
38
+ body
39
+ end
40
+ rescue JSON::ParserError
41
+ body
42
+ end
43
+
44
+ def request_with_state_change?(request)
45
+ request.post? || request.put? || request.patch? || request.delete?
46
+ end
47
+ end
@@ -1,3 +1,3 @@
1
1
  module RailsApiLogger
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_api_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alessandro Rodi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-22 00:00:00.000000000 Z
11
+ date: 2021-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -92,6 +92,7 @@ files:
92
92
  - lib/rails_api_logger.rb
93
93
  - lib/rails_api_logger/inbound_request_log.rb
94
94
  - lib/rails_api_logger/inbound_requests_logger.rb
95
+ - lib/rails_api_logger/inbound_requests_logger_middleware.rb
95
96
  - lib/rails_api_logger/outbound_request_log.rb
96
97
  - lib/rails_api_logger/rails_api_logger_rails_admin_configuration.rb
97
98
  - lib/rails_api_logger/request_log.rb