lograge-sql 2.2.0 → 2.3.1

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
2
  SHA256:
3
- metadata.gz: 6df7e9d756f02019ce93cbac6c0b19a275035a9d0fe74c631aa699eecf149f6f
4
- data.tar.gz: d34996be2888e4d234d914de95ee092e2b2380181dd70f4b70b2fe84fdc7cc97
3
+ metadata.gz: d435c21129588de106963c13febc8cd259660430a9bfdb95894cd626bd658f6c
4
+ data.tar.gz: 5f942aaff99e144669f4b0b1c7d280fd11a800ab8f7f5ffc37197d891ae5c6b3
5
5
  SHA512:
6
- metadata.gz: 9ef329876869d54eab7e71bf64345917185dfc2ad06d33cb3649689ddaa51ea7b257a425f5b1fb2c39da57b6b26e051d2a13a2d1687b51e99b8813f39be7e12f
7
- data.tar.gz: c15d0baabaaede38e6d949fe64d1abf1f14229ac2160b3d8b6a3b70a2ea117e49f0b4c36693f467622d42af862a1dd27d89e3066d44938a4d83bf35633cc170c
6
+ metadata.gz: 628036a6a1f5a00e27a67b6c056d883dc183a58ffddb01bf63f717790f77182221301dc7582cf570dd718efa6d73993cb1dec04c3a6ecf3b8b453a06a25d5061
7
+ data.tar.gz: 405f2fe165ffe7ddbe80816e9ca3b980886d25331986d8b9b0084ffb2b9b656c6f8327d0f03aac930e099333b2c1291f0e5c1f7d2ef1b3b5f8def06260e7f3c5
data/README.md CHANGED
@@ -82,6 +82,15 @@ Rails.application.configure do
82
82
  end
83
83
  ```
84
84
 
85
+ ### Filtering out sensitive info in SQL logs
86
+ By default, `lograge-sql` will log full query but if you have sensitive data that need to be filtered out, you can set `query_filter` config:
87
+
88
+ ```ruby
89
+ Rails.application.configure do
90
+ config.lograge_sql.query_filter = ->(query) { query.gsub(/custom_regexp/, "[FILTERED]".freeze) }
91
+ end
92
+ ```
93
+
85
94
  ### Thread-safety
86
95
 
87
96
  [Depending on the web server in your project](https://github.com/steveklabnik/request_store#the-problem) you might benefit from improved thread-safety by adding [`request_store`](https://github.com/steveklabnik/request_store) to your Gemfile. It will be automatically picked up by `lograge-sql`.
@@ -4,28 +4,46 @@ module Lograge
4
4
  # Log subscriber to replace ActiveRecord's default one
5
5
  class ActiveRecordLogSubscriber < ActiveSupport::LogSubscriber
6
6
  # Every time there's an SQL query, stores it into the Thread.
7
- # They'll later be access from the RequestLogSubscriber.
7
+ # They'll later be accessed from the RequestLogSubscriber.
8
8
  def sql(event)
9
9
  increase_runtime_duration(event)
10
- return if event.payload[:name] == 'SCHEMA'
10
+ return unless valid?(event)
11
11
 
12
- # Only store SQL events if `event.duration` is greater than the configured +min_duration+
13
- # No need to check if +min_duration+ is present before as it defaults to 0
14
- return if event.duration.to_f.round(2) < Lograge::Sql.min_duration_ms.to_f
15
-
16
- Lograge::Sql.store[:lograge_sql_queries] ||= []
17
- Lograge::Sql.store[:lograge_sql_queries] << Lograge::Sql.extract_event.call(event)
12
+ filter_query(event)
13
+ store(event)
18
14
  end
19
15
 
20
16
  private
21
17
 
22
- # Add the event duration to the overall ActiveRecord::LogSubscriber.runtime;
18
+ # Add the event duration to the overall ActiveRecord::RuntimeRegistry.sql_runtime;
23
19
  # note we don't do this when `keep_default_active_record_log` is enabled,
24
20
  # as ActiveRecord is already adding the duration.
25
21
  def increase_runtime_duration(event)
26
22
  return if Rails.application.config.lograge_sql.keep_default_active_record_log
27
23
 
28
- ActiveRecord::LogSubscriber.runtime += event.duration
24
+ ActiveRecord::RuntimeRegistry.sql_runtime += event.duration
25
+ end
26
+
27
+ def filter_query(event)
28
+ return unless Lograge::Sql.query_filter
29
+
30
+ # Filtering out sensitive info in SQL query if custom query_filter is provided
31
+ event.payload[:sql] = Lograge::Sql.query_filter.call(event.payload[:sql])
32
+ end
33
+
34
+ def valid?(event)
35
+ return false if event.payload[:name] == 'SCHEMA'
36
+
37
+ # Only store SQL events if `event.duration` is greater than the configured +min_duration+
38
+ # No need to check if +min_duration+ is present before as it defaults to 0
39
+ return false if event.duration.to_f.round(2) < Lograge::Sql.min_duration_ms.to_f
40
+
41
+ true
42
+ end
43
+
44
+ def store(event)
45
+ Lograge::Sql.store[:lograge_sql_queries] ||= []
46
+ Lograge::Sql.store[:lograge_sql_queries] << Lograge::Sql.extract_event.call(event)
29
47
  end
30
48
  end
31
49
  end
@@ -3,6 +3,6 @@
3
3
  module Lograge
4
4
  module Sql
5
5
  # Gem version
6
- VERSION = '2.2.0'
6
+ VERSION = '2.3.1'
7
7
  end
8
8
  end
data/lib/lograge/sql.rb CHANGED
@@ -13,12 +13,15 @@ module Lograge
13
13
  attr_accessor :extract_event
14
14
  # Filter SQL events by duration
15
15
  attr_accessor :min_duration_ms
16
+ # Filter SQL query
17
+ attr_accessor :query_filter
16
18
 
17
19
  # Initialise configuration with fallback to default values
18
20
  def setup(config)
19
21
  Lograge::Sql.formatter = config.formatter || default_formatter
20
22
  Lograge::Sql.extract_event = config.extract_event || default_extract_event
21
23
  Lograge::Sql.min_duration_ms = config.min_duration_ms || 0
24
+ Lograge::Sql.query_filter = config.query_filter
22
25
 
23
26
  # Disable existing ActiveRecord logging
24
27
  unsubscribe_log_subscribers unless config.keep_default_active_record_log
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lograge-sql
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mattia Giuffrida
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-10 00:00:00.000000000 Z
11
+ date: 2023-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord