honeybadger 6.6.0 → 6.6.2

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: a3f406fe88a1d27b07b2a361b11664f8ee58f2632e4a13c51dd033aa4fab27f7
4
- data.tar.gz: 2502400a348211a6c4493e52459ab6639661f6037e09f2acac72907dc56e5c7c
3
+ metadata.gz: 03a414b7ec784574a3164541f03d9e2b60d3a4af1d09b754d5c630282b3f0c12
4
+ data.tar.gz: 26afeb772bb5e998ed9a15a213697b72d3415ffadfc858fc1419913daa5ca500
5
5
  SHA512:
6
- metadata.gz: 7708c4e3c3da2c7b8613b2bfdbca334282d9f08af395c5e7c7a8f4c0ad11ab57f50c032d0e05f3028318fd97ee68aac832477776ae320fc1f2ef86111f20607d
7
- data.tar.gz: d6327d65aed500d59ee2b5eda3275e4ad4510698435bcfe67d42bac65db9c63d7c120277afb643571ed973477d6a1d3ba58c4ec46ea4105847b251935dd677b1
6
+ metadata.gz: 7ac887b4d796a351c0578cd52b492ca5e75a0232ff9f8fb1ab5f323608bfae9224d1e46a6ae8bd928b88cc5e424f65e5683e204c8c14ab9c7c639d76de651522
7
+ data.tar.gz: 0ba659e647134528493c16665e40efa33d7ef4ad13af4472005119d807941d4e3c6be047671d8a0588b3b064b71a8cf6d12d3a7402287e029cf4f66dd5173575
data/CHANGELOG.md CHANGED
@@ -1,6 +1,22 @@
1
1
  # Change Log
2
2
 
3
3
 
4
+ ## [6.6.2](https://github.com/honeybadger-io/honeybadger-ruby/compare/v6.6.0...v6.6.1) (2026-05-29)
5
+
6
+
7
+ ### Bug Fixes
8
+
9
+ * avoid duplicate BroadcastLogger breadcrumbs ([#814](https://github.com/honeybadger-io/honeybadger-ruby/issues/814)) ([4f5c5e0](https://github.com/honeybadger-io/honeybadger-ruby/commit/4f5c5e0dad934cc6a96f6444e257b733fd6471cf)), closes [#765](https://github.com/honeybadger-io/honeybadger-ruby/issues/765)
10
+ * change logging level for messages emitted in the development environment ([b615c83](https://github.com/honeybadger-io/honeybadger-ruby/commit/b615c83a75b8fcb45cd8b775696a6231e5c4e107))
11
+ * log the real reason for 403 responses ([#822](https://github.com/honeybadger-io/honeybadger-ruby/issues/822)) ([0338892](https://github.com/honeybadger-io/honeybadger-ruby/commit/03388926bb0cbb22f647860437565abf5bafd526))
12
+
13
+ ## [6.6.1](https://github.com/honeybadger-io/honeybadger-ruby/compare/v6.6.0...v6.6.1) (2026-05-15)
14
+
15
+
16
+ ### Bug Fixes
17
+
18
+ * change logging level for messages emitted in the development environment ([b615c83](https://github.com/honeybadger-io/honeybadger-ruby/commit/b615c83a75b8fcb45cd8b775696a6231e5c4e107))
19
+
4
20
  ## [6.6.0](https://github.com/honeybadger-io/honeybadger-ruby/compare/v6.5.6...v6.6.0) (2026-05-08)
5
21
 
6
22
 
@@ -50,6 +50,7 @@ module Honeybadger
50
50
 
51
51
  def error_message
52
52
  return message if code == :error
53
+ return error if code == 403 && NOT_BLANK.match?(error)
53
54
  return FRIENDLY_ERRORS[code] if FRIENDLY_ERRORS[code]
54
55
  return error if NOT_BLANK.match?(error)
55
56
  msg = "The server responded with #{code}"
@@ -1,12 +1,23 @@
1
+ require "logger"
1
2
  require "honeybadger/util/sanitizer"
2
3
 
3
4
  module Honeybadger
4
5
  module Breadcrumbs
5
6
  # @api private
6
7
  #
7
- module LogWrapper
8
- def add(severity, message = nil, progname = nil)
9
- org_severity, org_message, org_progname = severity, message, progname
8
+ module LogHelper
9
+ LOG_SEVERITY_LABELS = {
10
+ ::Logger::DEBUG => "DEBUG",
11
+ ::Logger::INFO => "INFO",
12
+ ::Logger::WARN => "WARN",
13
+ ::Logger::ERROR => "ERROR",
14
+ ::Logger::FATAL => "FATAL",
15
+ ::Logger::UNKNOWN => "ANY"
16
+ }.freeze
17
+
18
+ private
19
+
20
+ def add_log_breadcrumb(severity, message = nil, progname = nil)
10
21
  if defined?(Dry::Logger::Entry) && progname.is_a?(Dry::Logger::Entry) # Hanami uses dry-logger
11
22
  message, progname = progname.message || progname.exception, progname.progname
12
23
  elsif message.nil?
@@ -15,24 +26,81 @@ module Honeybadger
15
26
  message &&= Util::Sanitizer.sanitize(message.to_s)&.strip
16
27
  unless should_ignore_log?(message, progname)
17
28
  Honeybadger.add_breadcrumb(message, category: :log, metadata: {
18
- severity: format_severity(severity),
29
+ severity: log_severity_label(severity),
19
30
  progname: progname
20
31
  })
21
32
  end
22
-
23
- super(org_severity, org_message, org_progname)
24
33
  end
25
34
 
26
- private
35
+ def log_severity_label(severity)
36
+ if self.class.method_defined?(:format_severity) || self.class.private_method_defined?(:format_severity)
37
+ return format_severity(severity)
38
+ end
39
+
40
+ LOG_SEVERITY_LABELS.fetch(severity, severity)
41
+ end
27
42
 
28
43
  def should_ignore_log?(message, progname)
29
44
  message.nil? ||
30
45
  message == "" ||
31
46
  Thread.current[:__hb_within_log_subscriber] ||
47
+ Thread.current[:__hb_within_broadcast_logger] ||
32
48
  progname == "honeybadger"
33
49
  end
34
50
  end
35
51
 
52
+ module LogWrapper
53
+ include LogHelper
54
+
55
+ def add(severity, message = nil, progname = nil, &block)
56
+ org_severity, org_message, org_progname = severity, message, progname
57
+ add_log_breadcrumb(severity, message, progname)
58
+
59
+ super(org_severity, org_message, org_progname, &block)
60
+ end
61
+ end
62
+
63
+ # @api private
64
+ #
65
+ # ActiveSupport::BroadcastLogger forwards one logical log event to multiple
66
+ # Logger instances. Wrapping it separately records the event once while
67
+ # silencing the sink loggers for the duration of the broadcast.
68
+ module BroadcastLogWrapper
69
+ include LogHelper
70
+
71
+ LOG_METHOD_SEVERITIES = {
72
+ debug: ::Logger::DEBUG,
73
+ info: ::Logger::INFO,
74
+ warn: ::Logger::WARN,
75
+ error: ::Logger::ERROR,
76
+ fatal: ::Logger::FATAL,
77
+ unknown: ::Logger::UNKNOWN
78
+ }.freeze
79
+
80
+ def add(severity, message = nil, progname = nil, &block)
81
+ add_log_breadcrumb(severity, message, progname)
82
+ without_sink_breadcrumbs { super(severity, message, progname, &block) }
83
+ end
84
+ alias_method :log, :add
85
+
86
+ LOG_METHOD_SEVERITIES.each do |level, severity|
87
+ define_method(level) do |progname = nil, &block|
88
+ add_log_breadcrumb(severity, nil, progname)
89
+ without_sink_breadcrumbs { super(progname, &block) }
90
+ end
91
+ end
92
+
93
+ private
94
+
95
+ def without_sink_breadcrumbs
96
+ previous = Thread.current[:__hb_within_broadcast_logger]
97
+ Thread.current[:__hb_within_broadcast_logger] = true
98
+ yield
99
+ ensure
100
+ Thread.current[:__hb_within_broadcast_logger] = previous
101
+ end
102
+ end
103
+
36
104
  # @api private
37
105
  #
38
106
  # This module is designed to be prepended into the
@@ -43,10 +111,11 @@ module Honeybadger
43
111
  module LogSubscriberInjector
44
112
  %w[info debug warn error fatal unknown].each do |level|
45
113
  define_method(level) do |*args, &block|
114
+ previous = Thread.current[:__hb_within_log_subscriber]
46
115
  Thread.current[:__hb_within_log_subscriber] = true
47
116
  super(*args, &block)
48
117
  ensure
49
- Thread.current[:__hb_within_log_subscriber] = false
118
+ Thread.current[:__hb_within_log_subscriber] = previous
50
119
  end
51
120
  end
52
121
  end
@@ -294,7 +294,7 @@ module Honeybadger
294
294
  warn { sprintf("Insights Event send failed: payment is required. code=%s", response.code) }
295
295
  suspend(3600)
296
296
  when 403
297
- warn { sprintf("Insights Event send failed: API key is invalid. code=%s", response.code) }
297
+ warn { sprintf("Insights Event send failed: %s code=%s", response.error_message, response.code) }
298
298
  suspend(3600)
299
299
  when 413
300
300
  warn { sprintf("Insights Event send failed: Payload is too large. code=%s", response.code) }
@@ -305,7 +305,7 @@ module Honeybadger
305
305
  debug { sprintf("Success ⚡ Insights Event sent code=%s", response.code) }
306
306
  end
307
307
  when :stubbed
308
- info { "Success ⚡ Development mode is enabled; This event will be sent after app is deployed." }
308
+ debug { "Success ⚡ Development mode is enabled; This event will be sent after app is deployed." }
309
309
  when :error
310
310
  warn { sprintf("Insights Event send failed: an unknown error occurred. code=%s error=%s", response.code, response.message.to_s.dump) }
311
311
  else
@@ -50,7 +50,11 @@ module Honeybadger
50
50
  config[:"breadcrumbs.active_support_notifications"].each do |name, config|
51
51
  RailsBreadcrumbs.subscribe_to_notification(name, config)
52
52
  end
53
- ActiveSupport::LogSubscriber.prepend(Honeybadger::Breadcrumbs::LogSubscriberInjector) if config[:"breadcrumbs.logging.enabled"]
53
+
54
+ if config[:"breadcrumbs.logging.enabled"]
55
+ ActiveSupport::LogSubscriber.prepend(Honeybadger::Breadcrumbs::LogSubscriberInjector)
56
+ ActiveSupport::BroadcastLogger.prepend(Honeybadger::Breadcrumbs::BroadcastLogWrapper) if defined?(ActiveSupport::BroadcastLogger)
57
+ end
54
58
  end
55
59
 
56
60
  ::Logger.prepend(Honeybadger::Breadcrumbs::LogWrapper) if config[:"breadcrumbs.logging.enabled"]
@@ -1,4 +1,4 @@
1
1
  module Honeybadger
2
2
  # The current String Honeybadger version.
3
- VERSION = "6.6.0".freeze
3
+ VERSION = "6.6.2".freeze
4
4
  end
@@ -221,7 +221,7 @@ module Honeybadger
221
221
  warn { sprintf("Error report failed: payment is required. id=%s code=%s", msg.id, response.code) }
222
222
  suspend(3600)
223
223
  when 403
224
- warn { sprintf("Error report failed: API key is invalid. id=%s code=%s", msg.id, response.code) }
224
+ warn { sprintf("Error report failed: %s id=%s code=%s", response.error_message, msg.id, response.code) }
225
225
  suspend(3600)
226
226
  when 413
227
227
  warn { sprintf("Error report failed: Payload is too large. id=%s code=%s", msg.id, response.code) }
@@ -233,7 +233,7 @@ module Honeybadger
233
233
  info { sprintf("Success ⚡ https://%s/notice/%s id=%s code=%s", host, msg.id, msg.id, response.code) }
234
234
  end
235
235
  when :stubbed
236
- info { sprintf("Success ⚡ Development mode is enabled; this error will be reported if it occurs after you deploy your app. id=%s", msg.id) }
236
+ debug { sprintf("Success ⚡ Development mode is enabled; this error will be reported if it occurs after you deploy your app. id=%s", msg.id) }
237
237
  when :error
238
238
  warn { sprintf("Error report failed: an unknown error occurred. code=%s error=%s", response.code, response.message.to_s.dump) }
239
239
  else
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honeybadger
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.6.0
4
+ version: 6.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Honeybadger Industries LLC