researchable_loggable 1.5.1 → 1.6.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
2
  SHA256:
3
- metadata.gz: 55ac4f81b15d9f88b44cd0e358fdf9ed04734a512900fdb859ce9cb87a470aaa
4
- data.tar.gz: 8ba8d690974a6b46fd41271f4c912982536df60726f9ba22fb4696e2f19923bb
3
+ metadata.gz: 2005d7d174fbe9815687b94b4960961860d6b3a63ea445e01bc7cdaa8af8acfa
4
+ data.tar.gz: 9cd24968d9a82efaf1442acfeb4aa2aaf41f0634fe302c8297cccf13c2bc78fd
5
5
  SHA512:
6
- metadata.gz: d1f27347e3330fd2354d91546b943687a1ad8d4ee7cef1fcb532e0937bed62291ec8b2445dd60f8ab5cc25fb7ba3e76cc9f373b4d9bbafdb1855b552f4fd04bf
7
- data.tar.gz: accd88f616138d0a66e1a434b543f574f37eba588edac1a135f853777945613988ccc5b5449a38cae418fc55c5efcc733c2105760136ddb0e2758ca3f7ce1dfc
6
+ metadata.gz: cd4baf5861bfc5acb9b0ebcbb0636691f698b51fb78b917cd00b5a39ddeafb558c9f7fd3f385b03f8d7ba6aac6af75360dbbdbd52019c1d052a4843cbaee28d5
7
+ data.tar.gz: 47b75545f83e0a1ad52a6ab80a480b369a706758b1f4844a10d0165ca04b223780bcd9f60b36430eb69fc06cedaaf612cf0782be4b1e3e4bc4c0a8e03b9e371a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [1.6.0](https://gitlab.com/researchable/general/gems/loggable/compare/v1.5.1...v1.6.0) (2025-01-15)
2
+
3
+
4
+ ### Features
5
+
6
+ * **logging:** add request.id, file, and line to log payload ([f3db220](https://gitlab.com/researchable/general/gems/loggable/commit/f3db2209b6046aa6ce6ab9f0f052d9316b4508b9))
7
+
1
8
  ## [1.5.1](https://gitlab.com/researchable/general/gems/loggable/compare/v1.5.0...v1.5.1) (2024-12-05)
2
9
 
3
10
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- researchable_loggable (1.3.1)
4
+ researchable_loggable (1.5.1)
5
5
  lograge
6
6
  logstash-event
7
7
  opentelemetry-exporter-otlp (~> 0.28)
@@ -24,7 +24,13 @@ module Loggable
24
24
  # Custom formatter class that renders logs as in a key-value style using Logfmt formatting
25
25
  class KeyValueFormatter < ::Logger::Formatter
26
26
  def call(severity, timestamp, progname, msg)
27
- %(time=#{datetime(timestamp)} severity=#{severity.ljust(5)}#{progname(progname)} #{message(msg)}\n)
27
+ file, line = extract_caller_info
28
+ file = relative_to_rails_root(file)
29
+
30
+ file_info = format_tag('file', file)
31
+ line_info = format_tag('line', line)
32
+
33
+ %(time=#{datetime(timestamp)} severity=#{severity.ljust(5)}#{file_info}#{line_info}#{progname(progname)} #{message(msg)}\n) # rubocop:disable Layout/LineLength
28
34
  end
29
35
 
30
36
  private
@@ -80,6 +86,47 @@ module Loggable
80
86
  value
81
87
  end
82
88
  end
89
+
90
+ # Extracts caller information (file and line number) for the log message
91
+ def extract_caller_info
92
+ caller_locations.each do |loc|
93
+ # Skip frames that are part of internal or irrelevant paths (gems, vendor, etc.)
94
+ next if internal_frame?(loc.path)
95
+
96
+ # Return the first relevant application-level frame
97
+ return [loc.path, loc.lineno]
98
+ end
99
+
100
+ # Fallback if no relevant frame is found
101
+ %w[unknown unknown]
102
+ end
103
+
104
+ # Determines if a given file path corresponds to an internal or excluded frame
105
+ def internal_frame?(path)
106
+ excluded_patterns = %w[
107
+ /gems/
108
+ /vendor/
109
+ <internal:kernel>
110
+ loggable
111
+ ].freeze
112
+
113
+ excluded_patterns.any? { |pattern| path.include?(pattern) }
114
+ end
115
+
116
+ # Converts an absolute file path to a path relative to Rails.root
117
+ # If the path is outside of Rails.root, it returns the original path
118
+ def relative_to_rails_root(path)
119
+ rails_root = defined?(Rails) ? Rails.root.to_s : ''
120
+ path.start_with?(rails_root) ? path.sub(%r{^#{rails_root}/}, '') : path
121
+ end
122
+
123
+ # Formats a key-value tag for log output
124
+ # If the value is 'unknown', it returns an empty string to omit the tag
125
+ def format_tag(key, value)
126
+ return '' if value == 'unknown'
127
+
128
+ " #{key}=#{value}"
129
+ end
83
130
  end
84
131
  end
85
132
  end
@@ -37,9 +37,15 @@ module Loggable
37
37
  user_id = controller.send(config.loggable.current_user_method).try(:id)
38
38
  end
39
39
 
40
+ # Look for the request ID in headers
41
+ request_id = controller.request.headers['X-Request-ID'] || # Check for a custom request ID header
42
+ controller.request.headers['traceparent'] || # Check for the W3C Trace Context header
43
+ controller.request.env['HTTP_X_REQUEST_ID'] # Fallback to Rack's normalized header
44
+
40
45
  {
41
46
  'source.ip': controller.request.ip,
42
47
  'user.id': user_id,
48
+ 'request.id': request_id,
43
49
  status: response_code,
44
50
  span_id: OpenTelemetry::Trace.current_span.context.hex_span_id,
45
51
  trace_id: OpenTelemetry::Trace.current_span.context.hex_trace_id
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Loggable
4
- VERSION = '1.5.1'
4
+ VERSION = '1.6.0'
5
5
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TestGem
4
- VERSION = '1.5.1'
4
+ VERSION = '1.6.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: researchable_loggable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Researchable
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-12-05 00:00:00.000000000 Z
11
+ date: 2025-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lograge
@@ -109,13 +109,13 @@ files:
109
109
  - node_modules/semantic-release-rubygem/src/__tests__/fixtures/prerelease/lib/test-gem/version.rb
110
110
  - node_modules/semantic-release-rubygem/src/__tests__/fixtures/valid/lib/test-gem/version.rb
111
111
  - sig/loggable.rbs
112
- homepage: https://gitlab.com/researchable/general/gems/loggable/-/blob/v1.5.1/README.md
112
+ homepage: https://gitlab.com/researchable/general/gems/loggable/-/blob/v1.6.0/README.md
113
113
  licenses:
114
114
  - MIT
115
115
  metadata:
116
- homepage_uri: https://gitlab.com/researchable/general/gems/loggable/-/blob/v1.5.1/README.md
116
+ homepage_uri: https://gitlab.com/researchable/general/gems/loggable/-/blob/v1.6.0/README.md
117
117
  source_code_uri: https://gitlab.com/researchable/general/gems/loggable
118
- changelog_uri: https://gitlab.com/researchable/general/gems/loggable/-/blob/v1.5.1/CHANGELOG.md
118
+ changelog_uri: https://gitlab.com/researchable/general/gems/loggable/-/blob/v1.6.0/CHANGELOG.md
119
119
  post_install_message:
120
120
  rdoc_options: []
121
121
  require_paths: