appsignal 4.2.3-java → 4.3.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +67 -0
- data/lib/appsignal/logger.rb +19 -36
- data/lib/appsignal/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad308b372920378c65259925e4fd0afd49223322dec0c6c8fc8faf6595435555
|
4
|
+
data.tar.gz: ccfb167b163279e59d1e1dfacc4e95b16577828d2b6b57b136ec85a92f26e4d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e77413d1932a70775f439ff79f03a1da817ad28c9fa8104a759aedb1007e60c2b2fba04756071683d9df8be088c1a6924b2858093b384c5ba9138cd7ac4da4f
|
7
|
+
data.tar.gz: 79c5a466dc6b9c162db83488a506add62ed1cf189d5bec4021a530b5cf82cd23c60ec05537ba04043c4b9565e479cb0e8c28e46228f7a9e319404fe41a6ca9fb
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,72 @@
|
|
1
1
|
# AppSignal for Ruby gem Changelog
|
2
2
|
|
3
|
+
## 4.3.0
|
4
|
+
|
5
|
+
_Published on 2024-12-20._
|
6
|
+
|
7
|
+
### Added
|
8
|
+
|
9
|
+
- Add logger broadcasting. This change implements an alternative within `Appsignal::Logger` to `ActiveSupport::BroadcastLogger`, following the same interface. This enables a proper workaround to the issues with `ActiveSupport::BroadcastLogger` (([#49745](https://github.com/rails/rails/issues/49745), [#51883](https://github.com/rails/rails/issues/51883))) when used alongside tagged logging.
|
10
|
+
|
11
|
+
For example, to use tagged logging both in logs emitted by the default `Rails.logger` and in logs sent to AppSignal, replace the `Rails.logger` with an AppSignal logger that broadcasts to the default `Rails.logger`:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
appsignal_logger = Appsignal::Logger.new("app")
|
15
|
+
appsignal_logger.broadcast_to(Rails.logger)
|
16
|
+
Rails.logger = ActiveSupport::TaggedLogging.new(appsignal_logger)
|
17
|
+
```
|
18
|
+
|
19
|
+
(minor [5cb1464b](https://github.com/appsignal/appsignal-ruby/commit/5cb1464bcf12f043774fb55850e6b82aeba9c1ca))
|
20
|
+
|
21
|
+
### Removed
|
22
|
+
|
23
|
+
- Remove tagged logging support from `Appsignal::Logger`.
|
24
|
+
|
25
|
+
Tagged logging is still supported by wrapping an instance of `Appsignal::Logger` with `ActiveSupport::TaggedLogging`:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
appsignal_logger = Appsignal::Logger.new("rails")
|
29
|
+
tagged_logger = ActiveSupport::TaggedLogging.new(appsignal_logger)
|
30
|
+
Rails.logger = tagged_logger
|
31
|
+
```
|
32
|
+
|
33
|
+
Removing this functionality allows for a workaround to issues within Rails ([#49745](https://github.com/rails/rails/issues/49745), [#51883](https://github.com/rails/rails/issues/51883)), where using the broadcast logger to log to more than one tagged logger results in incorrect behaviour of the tagged logging methods, resulting in breakage throughout Rails' internals:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
# We use the built-in request ID middleware as an example that triggers
|
37
|
+
# the issue:
|
38
|
+
Rails.config.log_tags = [:request_id]
|
39
|
+
|
40
|
+
appsignal_logger = Appsignal::Logger.new("rails")
|
41
|
+
tagged_logger = ActiveSupport::TaggedLogging.new(appsignal_logger)
|
42
|
+
|
43
|
+
# This does not work correctly, because the default `Rails.logger` is a
|
44
|
+
# broadcast logger that is already broadcasting to a tagged logger.
|
45
|
+
# When asked to broadcast to a second tagged logger, the return value of
|
46
|
+
# `Rails.logger.tagged { ... }` will be incorrect, in turn causing the
|
47
|
+
# `RequestID` middleware, which uses it internally, to return broken
|
48
|
+
# Rack responses.
|
49
|
+
Rails.logger.broadcast_to(tagged_logger)
|
50
|
+
```
|
51
|
+
|
52
|
+
By reverting the changes to our logger so that it is no longer a tagged logger, we enable a workaround to this issue:
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
Rails.config.log_tags = [:request_id]
|
56
|
+
|
57
|
+
appsignal_logger = Appsignal::Logger.new("rails")
|
58
|
+
|
59
|
+
# This works correctly, because `appsignal_logger` is not a tagged logger.
|
60
|
+
# Note that `appsignal_logger` will not have the `request_id` tags.
|
61
|
+
Rails.logger.broadcast_to(appsignal_logger)
|
62
|
+
```
|
63
|
+
|
64
|
+
(patch [c061aa4e](https://github.com/appsignal/appsignal-ruby/commit/c061aa4e3f9485a1549ea90316534cddd36e238e))
|
65
|
+
|
66
|
+
### Fixed
|
67
|
+
|
68
|
+
- Fix `#silence` implementation for `Appsignal::Logger`. (patch [d08a1cec](https://github.com/appsignal/appsignal-ruby/commit/d08a1cec705db71999afa9c4af36e244a7b6483a))
|
69
|
+
|
3
70
|
## 4.2.3
|
4
71
|
|
5
72
|
_Published on 2024-12-17._
|
data/lib/appsignal/logger.rb
CHANGED
@@ -38,7 +38,7 @@ module Appsignal
|
|
38
38
|
@mutex = Mutex.new
|
39
39
|
@default_attributes = attributes
|
40
40
|
@appsignal_attributes = {}
|
41
|
-
@
|
41
|
+
@loggers = []
|
42
42
|
end
|
43
43
|
|
44
44
|
# We support the various methods in the Ruby
|
@@ -59,13 +59,14 @@ module Appsignal
|
|
59
59
|
end
|
60
60
|
return if message.nil?
|
61
61
|
|
62
|
-
if @tags.any?
|
63
|
-
formatted_tags = @tags.map { |tag| "[#{tag}]" }
|
64
|
-
message = "#{formatted_tags.join(" ")} #{message}"
|
65
|
-
end
|
66
|
-
|
67
62
|
message = formatter.call(severity, Time.now, group, message) if formatter
|
68
63
|
|
64
|
+
@loggers.each do |logger|
|
65
|
+
logger.add(severity, message, group)
|
66
|
+
rescue
|
67
|
+
nil
|
68
|
+
end
|
69
|
+
|
69
70
|
unless message.is_a?(String)
|
70
71
|
Appsignal.internal_logger.warn(
|
71
72
|
"Logger message was ignored, because it was not a String: #{message.inspect}"
|
@@ -150,41 +151,23 @@ module Appsignal
|
|
150
151
|
add_with_attributes(FATAL, message, @group, attributes)
|
151
152
|
end
|
152
153
|
|
153
|
-
# Listen to ActiveSupport tagged logging tags set with `Rails.logger.tagged`.
|
154
|
-
def tagged(tags)
|
155
|
-
@tags.append(*tags)
|
156
|
-
yield self
|
157
|
-
ensure
|
158
|
-
@tags.pop(tags.length)
|
159
|
-
end
|
160
|
-
|
161
|
-
# Listen to ActiveSupport tagged logging tags set with `Rails.config.log_tags`.
|
162
|
-
def push_tags(*tags)
|
163
|
-
@tags.append(*tags)
|
164
|
-
end
|
165
|
-
|
166
|
-
# Remove a set of ActiveSupport tagged logging tags set with `Rails.config.log_tags`.
|
167
|
-
def pop_tags(count = 1)
|
168
|
-
@tags.pop(count)
|
169
|
-
end
|
170
|
-
|
171
|
-
# Remove all ActiveSupport tagged logging tags set with `Rails.config.log_tags`.
|
172
|
-
def clear_tags!
|
173
|
-
@tags.clear
|
174
|
-
end
|
175
|
-
|
176
154
|
# When using ActiveSupport::TaggedLogging without the broadcast feature,
|
177
155
|
# the passed logger is required to respond to the `silence` method.
|
178
|
-
# In our case it behaves as the broadcast feature of the Rails logger, but
|
179
|
-
# we don't have to check if the parent logger has the `silence` method defined
|
180
|
-
# as our logger directly inherits from Ruby base logger.
|
181
156
|
#
|
182
|
-
#
|
157
|
+
# Reference links:
|
183
158
|
#
|
184
159
|
# - https://github.com/rails/rails/blob/e11ebc04cfbe41c06cdfb70ee5a9fdbbd98bb263/activesupport/lib/active_support/logger.rb#L60-L76
|
185
|
-
# - https://github.com/rails/rails/blob/
|
186
|
-
def silence(
|
187
|
-
|
160
|
+
# - https://github.com/rails/rails/blob/e11ebc04cfbe41c06cdfb70ee5a9fdbbd98bb263/activesupport/lib/active_support/logger_silence.rb
|
161
|
+
def silence(severity = ERROR, &block)
|
162
|
+
previous_level = @level
|
163
|
+
@level = severity
|
164
|
+
block.call(self)
|
165
|
+
ensure
|
166
|
+
@level = previous_level
|
167
|
+
end
|
168
|
+
|
169
|
+
def broadcast_to(logger)
|
170
|
+
@loggers << logger
|
188
171
|
end
|
189
172
|
|
190
173
|
private
|
data/lib/appsignal/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appsignal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.3.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Robert Beekman
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-12-
|
13
|
+
date: 2024-12-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: logger
|