activesupport 7.0.8 → 7.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +142 -428
- data/MIT-LICENSE +1 -1
- data/README.rdoc +4 -4
- data/lib/active_support/actionable_error.rb +3 -1
- data/lib/active_support/array_inquirer.rb +3 -1
- data/lib/active_support/backtrace_cleaner.rb +39 -7
- data/lib/active_support/benchmarkable.rb +1 -0
- data/lib/active_support/broadcast_logger.rb +251 -0
- data/lib/active_support/builder.rb +1 -1
- data/lib/active_support/cache/coder.rb +153 -0
- data/lib/active_support/cache/entry.rb +134 -0
- data/lib/active_support/cache/file_store.rb +49 -17
- data/lib/active_support/cache/mem_cache_store.rb +94 -128
- data/lib/active_support/cache/memory_store.rb +80 -25
- data/lib/active_support/cache/null_store.rb +6 -0
- data/lib/active_support/cache/redis_cache_store.rb +165 -152
- data/lib/active_support/cache/serializer_with_fallback.rb +152 -0
- data/lib/active_support/cache/strategy/local_cache.rb +29 -14
- data/lib/active_support/cache.rb +363 -291
- data/lib/active_support/callbacks.rb +118 -134
- data/lib/active_support/code_generator.rb +15 -10
- data/lib/active_support/concern.rb +4 -2
- data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +42 -3
- data/lib/active_support/concurrency/null_lock.rb +13 -0
- data/lib/active_support/configurable.rb +10 -0
- data/lib/active_support/core_ext/array/conversions.rb +1 -2
- data/lib/active_support/core_ext/array.rb +0 -1
- data/lib/active_support/core_ext/class/subclasses.rb +17 -34
- data/lib/active_support/core_ext/date/blank.rb +4 -0
- data/lib/active_support/core_ext/date/conversions.rb +1 -2
- data/lib/active_support/core_ext/date.rb +0 -1
- data/lib/active_support/core_ext/date_and_time/calculations.rb +10 -0
- data/lib/active_support/core_ext/date_and_time/compatibility.rb +28 -1
- data/lib/active_support/core_ext/date_time/blank.rb +4 -0
- data/lib/active_support/core_ext/date_time/conversions.rb +2 -2
- data/lib/active_support/core_ext/date_time.rb +0 -1
- data/lib/active_support/core_ext/digest/uuid.rb +7 -10
- data/lib/active_support/core_ext/enumerable.rb +3 -75
- data/lib/active_support/core_ext/erb/util.rb +201 -0
- data/lib/active_support/core_ext/hash/conversions.rb +1 -1
- data/lib/active_support/core_ext/hash/deep_merge.rb +22 -14
- data/lib/active_support/core_ext/hash/keys.rb +4 -4
- data/lib/active_support/core_ext/module/attr_internal.rb +17 -6
- data/lib/active_support/core_ext/module/attribute_accessors.rb +6 -0
- data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +34 -16
- data/lib/active_support/core_ext/module/concerning.rb +6 -6
- data/lib/active_support/core_ext/module/delegation.rb +20 -119
- data/lib/active_support/core_ext/module/deprecation.rb +12 -12
- data/lib/active_support/core_ext/module/introspection.rb +0 -1
- data/lib/active_support/core_ext/numeric/bytes.rb +9 -0
- data/lib/active_support/core_ext/numeric/conversions.rb +5 -3
- data/lib/active_support/core_ext/numeric.rb +0 -1
- data/lib/active_support/core_ext/object/blank.rb +45 -1
- data/lib/active_support/core_ext/object/deep_dup.rb +16 -0
- data/lib/active_support/core_ext/object/duplicable.rb +24 -15
- data/lib/active_support/core_ext/object/inclusion.rb +13 -5
- data/lib/active_support/core_ext/object/instance_variables.rb +4 -2
- data/lib/active_support/core_ext/object/json.rb +17 -7
- data/lib/active_support/core_ext/object/with.rb +46 -0
- data/lib/active_support/core_ext/object/with_options.rb +4 -4
- data/lib/active_support/core_ext/object.rb +1 -0
- data/lib/active_support/core_ext/pathname/blank.rb +20 -0
- data/lib/active_support/core_ext/pathname/existence.rb +2 -0
- data/lib/active_support/core_ext/pathname.rb +1 -0
- data/lib/active_support/core_ext/range/conversions.rb +28 -7
- data/lib/active_support/core_ext/range/overlap.rb +40 -0
- data/lib/active_support/core_ext/range.rb +1 -2
- data/lib/active_support/core_ext/securerandom.rb +1 -5
- data/lib/active_support/core_ext/string/conversions.rb +1 -1
- data/lib/active_support/core_ext/string/filters.rb +21 -15
- data/lib/active_support/core_ext/string/indent.rb +1 -1
- data/lib/active_support/core_ext/string/inflections.rb +16 -5
- data/lib/active_support/core_ext/string/multibyte.rb +1 -1
- data/lib/active_support/core_ext/string/output_safety.rb +34 -177
- data/lib/active_support/core_ext/thread/backtrace/location.rb +12 -0
- data/lib/active_support/core_ext/time/calculations.rb +36 -30
- data/lib/active_support/core_ext/time/compatibility.rb +16 -0
- data/lib/active_support/core_ext/time/conversions.rb +1 -3
- data/lib/active_support/core_ext/time/zones.rb +4 -4
- data/lib/active_support/core_ext/time.rb +0 -1
- data/lib/active_support/core_ext.rb +0 -1
- data/lib/active_support/current_attributes.rb +53 -46
- data/lib/active_support/deep_mergeable.rb +53 -0
- data/lib/active_support/delegation.rb +202 -0
- data/lib/active_support/dependencies/autoload.rb +9 -16
- data/lib/active_support/deprecation/behaviors.rb +65 -42
- data/lib/active_support/deprecation/constant_accessor.rb +47 -25
- data/lib/active_support/deprecation/deprecators.rb +104 -0
- data/lib/active_support/deprecation/disallowed.rb +3 -5
- data/lib/active_support/deprecation/method_wrappers.rb +6 -23
- data/lib/active_support/deprecation/proxy_wrappers.rb +34 -22
- data/lib/active_support/deprecation/reporting.rb +49 -27
- data/lib/active_support/deprecation.rb +39 -9
- data/lib/active_support/deprecator.rb +7 -0
- data/lib/active_support/descendants_tracker.rb +66 -172
- data/lib/active_support/duration/iso8601_parser.rb +2 -2
- data/lib/active_support/duration/iso8601_serializer.rb +1 -4
- data/lib/active_support/duration.rb +13 -7
- data/lib/active_support/encrypted_configuration.rb +30 -9
- data/lib/active_support/encrypted_file.rb +9 -4
- data/lib/active_support/environment_inquirer.rb +22 -2
- data/lib/active_support/error_reporter/test_helper.rb +15 -0
- data/lib/active_support/error_reporter.rb +160 -36
- data/lib/active_support/evented_file_update_checker.rb +0 -1
- data/lib/active_support/execution_wrapper.rb +4 -5
- data/lib/active_support/file_update_checker.rb +5 -3
- data/lib/active_support/fork_tracker.rb +4 -32
- data/lib/active_support/gem_version.rb +3 -3
- data/lib/active_support/gzip.rb +2 -0
- data/lib/active_support/hash_with_indifferent_access.rb +41 -25
- data/lib/active_support/html_safe_translation.rb +19 -6
- data/lib/active_support/i18n.rb +1 -1
- data/lib/active_support/i18n_railtie.rb +20 -13
- data/lib/active_support/inflector/inflections.rb +2 -0
- data/lib/active_support/inflector/methods.rb +23 -11
- data/lib/active_support/inflector/transliterate.rb +3 -1
- data/lib/active_support/isolated_execution_state.rb +26 -22
- data/lib/active_support/json/decoding.rb +2 -1
- data/lib/active_support/json/encoding.rb +25 -43
- data/lib/active_support/key_generator.rb +9 -1
- data/lib/active_support/lazy_load_hooks.rb +6 -4
- data/lib/active_support/locale/en.yml +2 -0
- data/lib/active_support/log_subscriber.rb +74 -34
- data/lib/active_support/logger.rb +22 -60
- data/lib/active_support/logger_thread_safe_level.rb +10 -32
- data/lib/active_support/message_encryptor.rb +197 -53
- data/lib/active_support/message_encryptors.rb +141 -0
- data/lib/active_support/message_pack/cache_serializer.rb +23 -0
- data/lib/active_support/message_pack/extensions.rb +305 -0
- data/lib/active_support/message_pack/serializer.rb +63 -0
- data/lib/active_support/message_pack.rb +50 -0
- data/lib/active_support/message_verifier.rb +220 -89
- data/lib/active_support/message_verifiers.rb +135 -0
- data/lib/active_support/messages/codec.rb +65 -0
- data/lib/active_support/messages/metadata.rb +111 -45
- data/lib/active_support/messages/rotation_coordinator.rb +93 -0
- data/lib/active_support/messages/rotator.rb +34 -32
- data/lib/active_support/messages/serializer_with_fallback.rb +158 -0
- data/lib/active_support/multibyte/chars.rb +4 -2
- data/lib/active_support/multibyte/unicode.rb +9 -37
- data/lib/active_support/notifications/fanout.rb +248 -87
- data/lib/active_support/notifications/instrumenter.rb +93 -25
- data/lib/active_support/notifications.rb +29 -28
- data/lib/active_support/number_helper/number_converter.rb +16 -7
- data/lib/active_support/number_helper/number_to_currency_converter.rb +6 -6
- data/lib/active_support/number_helper/number_to_human_size_converter.rb +3 -3
- data/lib/active_support/number_helper/number_to_phone_converter.rb +1 -0
- data/lib/active_support/number_helper.rb +379 -318
- data/lib/active_support/option_merger.rb +2 -2
- data/lib/active_support/ordered_hash.rb +3 -3
- data/lib/active_support/ordered_options.rb +67 -15
- data/lib/active_support/parameter_filter.rb +84 -69
- data/lib/active_support/proxy_object.rb +8 -3
- data/lib/active_support/railtie.rb +25 -20
- data/lib/active_support/reloader.rb +12 -4
- data/lib/active_support/rescuable.rb +2 -0
- data/lib/active_support/secure_compare_rotator.rb +16 -9
- data/lib/active_support/string_inquirer.rb +4 -2
- data/lib/active_support/subscriber.rb +10 -27
- data/lib/active_support/syntax_error_proxy.rb +60 -0
- data/lib/active_support/tagged_logging.rb +64 -25
- data/lib/active_support/test_case.rb +156 -7
- data/lib/active_support/testing/assertions.rb +28 -12
- data/lib/active_support/testing/autorun.rb +0 -2
- data/lib/active_support/testing/constant_stubbing.rb +54 -0
- data/lib/active_support/testing/deprecation.rb +20 -27
- data/lib/active_support/testing/error_reporter_assertions.rb +107 -0
- data/lib/active_support/testing/isolation.rb +21 -9
- data/lib/active_support/testing/method_call_assertions.rb +7 -8
- data/lib/active_support/testing/parallelization/server.rb +3 -0
- data/lib/active_support/testing/parallelize_executor.rb +8 -3
- data/lib/active_support/testing/setup_and_teardown.rb +2 -0
- data/lib/active_support/testing/stream.rb +1 -1
- data/lib/active_support/testing/strict_warnings.rb +43 -0
- data/lib/active_support/testing/tests_without_assertions.rb +19 -0
- data/lib/active_support/testing/time_helpers.rb +38 -16
- data/lib/active_support/time_with_zone.rb +12 -18
- data/lib/active_support/values/time_zone.rb +25 -14
- data/lib/active_support/version.rb +1 -1
- data/lib/active_support/xml_mini/jdom.rb +3 -10
- data/lib/active_support/xml_mini/nokogiri.rb +1 -1
- data/lib/active_support/xml_mini/nokogirisax.rb +1 -1
- data/lib/active_support/xml_mini/rexml.rb +1 -1
- data/lib/active_support/xml_mini.rb +12 -3
- data/lib/active_support.rb +15 -3
- metadata +145 -24
- data/lib/active_support/core_ext/array/deprecated_conversions.rb +0 -25
- data/lib/active_support/core_ext/date/deprecated_conversions.rb +0 -40
- data/lib/active_support/core_ext/date_time/deprecated_conversions.rb +0 -36
- data/lib/active_support/core_ext/numeric/deprecated_conversions.rb +0 -60
- data/lib/active_support/core_ext/range/deprecated_conversions.rb +0 -36
- data/lib/active_support/core_ext/range/include_time_with_zone.rb +0 -5
- data/lib/active_support/core_ext/range/overlaps.rb +0 -10
- data/lib/active_support/core_ext/time/deprecated_conversions.rb +0 -73
- data/lib/active_support/core_ext/uri.rb +0 -5
- data/lib/active_support/deprecation/instance_delegator.rb +0 -38
- data/lib/active_support/per_thread_registry.rb +0 -65
- data/lib/active_support/ruby_features.rb +0 -7
@@ -1,11 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module ActiveSupport
|
4
|
-
#
|
4
|
+
# = Lazy Load Hooks
|
5
|
+
#
|
6
|
+
# LazyLoadHooks allows \Rails to lazily load a lot of components and thus
|
5
7
|
# making the app boot faster. Because of this feature now there is no need to
|
6
|
-
# require
|
8
|
+
# require +ActiveRecord::Base+ at boot time purely to apply
|
7
9
|
# configuration. Instead a hook is registered that applies configuration once
|
8
|
-
#
|
10
|
+
# +ActiveRecord::Base+ is loaded. Here +ActiveRecord::Base+ is
|
9
11
|
# used as example but this feature can be applied elsewhere too.
|
10
12
|
#
|
11
13
|
# Here is an example where on_load method is called to register a hook.
|
@@ -47,7 +49,7 @@ module ActiveSupport
|
|
47
49
|
end
|
48
50
|
end
|
49
51
|
|
50
|
-
# Declares a block that will be executed when a Rails component is fully
|
52
|
+
# Declares a block that will be executed when a \Rails component is fully
|
51
53
|
# loaded. If the component has already loaded, the block is executed
|
52
54
|
# immediately.
|
53
55
|
#
|
@@ -57,6 +57,7 @@ en:
|
|
57
57
|
format:
|
58
58
|
# Where is the currency sign? %u is the currency unit, %n is the number (default: $5.00)
|
59
59
|
format: "%u%n"
|
60
|
+
negative_format: "-%u%n"
|
60
61
|
unit: "$"
|
61
62
|
# These six are to override number.format and are optional
|
62
63
|
separator: "."
|
@@ -112,6 +113,7 @@ en:
|
|
112
113
|
tb: "TB"
|
113
114
|
pb: "PB"
|
114
115
|
eb: "EB"
|
116
|
+
zb: "ZB"
|
115
117
|
# Used in NumberHelper.number_to_human()
|
116
118
|
decimal_units:
|
117
119
|
format: "%n %u"
|
@@ -2,10 +2,14 @@
|
|
2
2
|
|
3
3
|
require "active_support/core_ext/module/attribute_accessors"
|
4
4
|
require "active_support/core_ext/class/attribute"
|
5
|
+
require "active_support/core_ext/enumerable"
|
5
6
|
require "active_support/subscriber"
|
7
|
+
require "active_support/deprecation/proxy_wrappers"
|
6
8
|
|
7
9
|
module ActiveSupport
|
8
|
-
#
|
10
|
+
# = Active Support Log \Subscriber
|
11
|
+
#
|
12
|
+
# +ActiveSupport::LogSubscriber+ is an object set to consume
|
9
13
|
# ActiveSupport::Notifications with the sole purpose of logging them.
|
10
14
|
# The log subscriber dispatches notifications to a registered object based
|
11
15
|
# on its given namespace.
|
@@ -15,29 +19,23 @@ module ActiveSupport
|
|
15
19
|
#
|
16
20
|
# module ActiveRecord
|
17
21
|
# class LogSubscriber < ActiveSupport::LogSubscriber
|
22
|
+
# attach_to :active_record
|
23
|
+
#
|
18
24
|
# def sql(event)
|
19
25
|
# info "#{event.payload[:name]} (#{event.duration}) #{event.payload[:sql]}"
|
20
26
|
# end
|
21
27
|
# end
|
22
28
|
# end
|
23
29
|
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
# ActiveRecord::LogSubscriber.attach_to :active_record
|
30
|
+
# ActiveRecord::LogSubscriber.logger must be set as well, but it is assigned
|
31
|
+
# automatically in a \Rails environment.
|
27
32
|
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
32
|
-
# A logger also needs to be set with <tt>ActiveRecord::LogSubscriber.logger=</tt>.
|
33
|
-
# This is assigned automatically in a Rails environment.
|
34
|
-
#
|
35
|
-
# After configured, whenever a <tt>"sql.active_record"</tt> notification is published,
|
36
|
-
# it will properly dispatch the event
|
37
|
-
# (<tt>ActiveSupport::Notifications::Event</tt>) to the sql method.
|
33
|
+
# After configured, whenever a <tt>"sql.active_record"</tt> notification is
|
34
|
+
# published, it will properly dispatch the event
|
35
|
+
# (ActiveSupport::Notifications::Event) to the +sql+ method.
|
38
36
|
#
|
39
37
|
# Being an ActiveSupport::Notifications consumer,
|
40
|
-
#
|
38
|
+
# +ActiveSupport::LogSubscriber+ exposes a simple interface to check if
|
41
39
|
# instrumented code raises an exception. It is common to log a different
|
42
40
|
# message in case of an error, and this can be achieved by extending
|
43
41
|
# the previous example:
|
@@ -59,15 +57,20 @@ module ActiveSupport
|
|
59
57
|
# end
|
60
58
|
# end
|
61
59
|
#
|
62
|
-
#
|
63
|
-
#
|
64
|
-
#
|
60
|
+
# +ActiveSupport::LogSubscriber+ also has some helpers to deal with
|
61
|
+
# logging. For example, ActiveSupport::LogSubscriber.flush_all! will ensure
|
62
|
+
# that all logs are flushed, and it is called in Rails::Rack::Logger after a
|
63
|
+
# request finishes.
|
65
64
|
class LogSubscriber < Subscriber
|
66
|
-
#
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
65
|
+
# ANSI sequence modes
|
66
|
+
MODES = {
|
67
|
+
clear: 0,
|
68
|
+
bold: 1,
|
69
|
+
italic: 3,
|
70
|
+
underline: 4,
|
71
|
+
}
|
72
|
+
|
73
|
+
# ANSI sequence colors
|
71
74
|
BLACK = "\e[30m"
|
72
75
|
RED = "\e[31m"
|
73
76
|
GREEN = "\e[32m"
|
@@ -78,6 +81,13 @@ module ActiveSupport
|
|
78
81
|
WHITE = "\e[37m"
|
79
82
|
|
80
83
|
mattr_accessor :colorize_logging, default: true
|
84
|
+
class_attribute :log_levels, instance_accessor: false, default: {} # :nodoc:
|
85
|
+
|
86
|
+
LEVEL_CHECKS = {
|
87
|
+
debug: -> (logger) { !logger.debug? },
|
88
|
+
info: -> (logger) { !logger.info? },
|
89
|
+
error: -> (logger) { !logger.error? },
|
90
|
+
}
|
81
91
|
|
82
92
|
class << self
|
83
93
|
def logger
|
@@ -86,6 +96,12 @@ module ActiveSupport
|
|
86
96
|
end
|
87
97
|
end
|
88
98
|
|
99
|
+
def attach_to(...) # :nodoc:
|
100
|
+
result = super
|
101
|
+
set_event_levels
|
102
|
+
result
|
103
|
+
end
|
104
|
+
|
89
105
|
attr_writer :logger
|
90
106
|
|
91
107
|
def log_subscribers
|
@@ -101,20 +117,36 @@ module ActiveSupport
|
|
101
117
|
def fetch_public_methods(subscriber, inherit_all)
|
102
118
|
subscriber.public_methods(inherit_all) - LogSubscriber.public_instance_methods(true)
|
103
119
|
end
|
120
|
+
|
121
|
+
def set_event_levels
|
122
|
+
if subscriber
|
123
|
+
subscriber.event_levels = log_levels.transform_keys { |k| "#{k}.#{namespace}" }
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def subscribe_log_level(method, level)
|
128
|
+
self.log_levels = log_levels.merge(method => LEVEL_CHECKS.fetch(level))
|
129
|
+
set_event_levels
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def initialize
|
134
|
+
super
|
135
|
+
@event_levels = {}
|
104
136
|
end
|
105
137
|
|
106
138
|
def logger
|
107
139
|
LogSubscriber.logger
|
108
140
|
end
|
109
141
|
|
110
|
-
def
|
111
|
-
|
142
|
+
def silenced?(event)
|
143
|
+
logger.nil? || @event_levels[event]&.call(logger)
|
112
144
|
end
|
113
145
|
|
114
|
-
def
|
146
|
+
def call(event)
|
115
147
|
super if logger
|
116
148
|
rescue => e
|
117
|
-
log_exception(name, e)
|
149
|
+
log_exception(event.name, e)
|
118
150
|
end
|
119
151
|
|
120
152
|
def publish_event(event)
|
@@ -123,6 +155,8 @@ module ActiveSupport
|
|
123
155
|
log_exception(event.name, e)
|
124
156
|
end
|
125
157
|
|
158
|
+
attr_writer :event_levels # :nodoc:
|
159
|
+
|
126
160
|
private
|
127
161
|
%w(info debug warn error fatal unknown).each do |level|
|
128
162
|
class_eval <<-METHOD, __FILE__, __LINE__ + 1
|
@@ -132,15 +166,21 @@ module ActiveSupport
|
|
132
166
|
METHOD
|
133
167
|
end
|
134
168
|
|
135
|
-
# Set color by using a symbol or one of the defined constants.
|
136
|
-
#
|
137
|
-
#
|
138
|
-
|
139
|
-
def color(text, color, bold = false) # :doc:
|
169
|
+
# Set color by using a symbol or one of the defined constants. Set modes
|
170
|
+
# by specifying bold, italic, or underline options. Inspired by Highline,
|
171
|
+
# this method will automatically clear formatting at the end of the returned String.
|
172
|
+
def color(text, color, mode_options = {}) # :doc:
|
140
173
|
return text unless colorize_logging
|
141
174
|
color = self.class.const_get(color.upcase) if color.is_a?(Symbol)
|
142
|
-
|
143
|
-
"#{
|
175
|
+
mode = mode_from(mode_options)
|
176
|
+
clear = "\e[#{MODES[:clear]}m"
|
177
|
+
"#{mode}#{color}#{text}#{clear}"
|
178
|
+
end
|
179
|
+
|
180
|
+
def mode_from(options)
|
181
|
+
modes = MODES.values_at(*options.compact_blank.keys)
|
182
|
+
|
183
|
+
"\e[#{modes.join(";")}m" if modes.any?
|
144
184
|
end
|
145
185
|
|
146
186
|
def log_exception(name, e)
|
@@ -13,73 +13,26 @@ module ActiveSupport
|
|
13
13
|
# logger = Logger.new(STDOUT)
|
14
14
|
# ActiveSupport::Logger.logger_outputs_to?(logger, STDOUT)
|
15
15
|
# # => true
|
16
|
+
#
|
17
|
+
# logger = Logger.new('/var/log/rails.log')
|
18
|
+
# ActiveSupport::Logger.logger_outputs_to?(logger, '/var/log/rails.log')
|
19
|
+
# # => true
|
16
20
|
def self.logger_outputs_to?(logger, *sources)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
# Broadcasts logs to multiple loggers.
|
23
|
-
def self.broadcast(logger) # :nodoc:
|
24
|
-
Module.new do
|
25
|
-
define_method(:add) do |*args, &block|
|
26
|
-
logger.add(*args, &block)
|
27
|
-
super(*args, &block)
|
28
|
-
end
|
29
|
-
|
30
|
-
define_method(:<<) do |x|
|
31
|
-
logger << x
|
32
|
-
super(x)
|
33
|
-
end
|
34
|
-
|
35
|
-
define_method(:close) do
|
36
|
-
logger.close
|
37
|
-
super()
|
38
|
-
end
|
39
|
-
|
40
|
-
define_method(:progname=) do |name|
|
41
|
-
logger.progname = name
|
42
|
-
super(name)
|
43
|
-
end
|
44
|
-
|
45
|
-
define_method(:formatter=) do |formatter|
|
46
|
-
logger.formatter = formatter
|
47
|
-
super(formatter)
|
48
|
-
end
|
49
|
-
|
50
|
-
define_method(:level=) do |level|
|
51
|
-
logger.level = level
|
52
|
-
super(level)
|
53
|
-
end
|
21
|
+
loggers = if logger.is_a?(BroadcastLogger)
|
22
|
+
logger.broadcasts
|
23
|
+
else
|
24
|
+
[logger]
|
25
|
+
end
|
54
26
|
|
55
|
-
|
56
|
-
|
57
|
-
super(level) if respond_to?(:local_level=)
|
58
|
-
end
|
27
|
+
logdevs = loggers.map { |logger| logger.instance_variable_get(:@logdev) }
|
28
|
+
logger_sources = logdevs.filter_map { |logdev| logdev.try(:filename) || logdev.try(:dev) }
|
59
29
|
|
60
|
-
|
61
|
-
if logger.respond_to?(:silence)
|
62
|
-
logger.silence(level) do
|
63
|
-
if defined?(super)
|
64
|
-
super(level, &block)
|
65
|
-
else
|
66
|
-
block.call(self)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
else
|
70
|
-
if defined?(super)
|
71
|
-
super(level, &block)
|
72
|
-
else
|
73
|
-
block.call(self)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
30
|
+
normalize_sources(sources).intersect?(normalize_sources(logger_sources))
|
78
31
|
end
|
79
32
|
|
80
33
|
def initialize(*args, **kwargs)
|
81
34
|
super
|
82
|
-
@formatter
|
35
|
+
@formatter ||= SimpleFormatter.new
|
83
36
|
end
|
84
37
|
|
85
38
|
# Simple formatter which only displays the message.
|
@@ -89,5 +42,14 @@ module ActiveSupport
|
|
89
42
|
"#{String === msg ? msg : msg.inspect}\n"
|
90
43
|
end
|
91
44
|
end
|
45
|
+
|
46
|
+
private
|
47
|
+
def self.normalize_sources(sources)
|
48
|
+
sources.map do |source|
|
49
|
+
source = source.path if source.respond_to?(:path)
|
50
|
+
source = File.realpath(source) if source.is_a?(String) && File.exist?(source)
|
51
|
+
source
|
52
|
+
end
|
53
|
+
end
|
92
54
|
end
|
93
55
|
end
|
@@ -1,24 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "active_support/concern"
|
4
|
-
require "
|
5
|
-
require "concurrent"
|
6
|
-
require "fiber"
|
4
|
+
require "logger"
|
7
5
|
|
8
6
|
module ActiveSupport
|
9
7
|
module LoggerThreadSafeLevel # :nodoc:
|
10
8
|
extend ActiveSupport::Concern
|
11
9
|
|
12
|
-
Logger::Severity.constants.each do |severity|
|
13
|
-
class_eval(<<-EOT, __FILE__, __LINE__ + 1)
|
14
|
-
def #{severity.downcase}? # def debug?
|
15
|
-
Logger::#{severity} >= level # DEBUG >= level
|
16
|
-
end # end
|
17
|
-
EOT
|
18
|
-
end
|
19
|
-
|
20
10
|
def local_level
|
21
|
-
IsolatedExecutionState[
|
11
|
+
IsolatedExecutionState[local_level_key]
|
22
12
|
end
|
23
13
|
|
24
14
|
def local_level=(level)
|
@@ -30,7 +20,11 @@ module ActiveSupport
|
|
30
20
|
else
|
31
21
|
raise ArgumentError, "Invalid log level: #{level.inspect}"
|
32
22
|
end
|
33
|
-
|
23
|
+
if level.nil?
|
24
|
+
IsolatedExecutionState.delete(local_level_key)
|
25
|
+
else
|
26
|
+
IsolatedExecutionState[local_level_key] = level
|
27
|
+
end
|
34
28
|
end
|
35
29
|
|
36
30
|
def level
|
@@ -45,25 +39,9 @@ module ActiveSupport
|
|
45
39
|
self.local_level = old_local_level
|
46
40
|
end
|
47
41
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
severity ||= UNKNOWN
|
52
|
-
progname ||= @progname
|
53
|
-
|
54
|
-
return true if @logdev.nil? || severity < level
|
55
|
-
|
56
|
-
if message.nil?
|
57
|
-
if block_given?
|
58
|
-
message = yield
|
59
|
-
else
|
60
|
-
message = progname
|
61
|
-
progname = @progname
|
62
|
-
end
|
42
|
+
private
|
43
|
+
def local_level_key
|
44
|
+
@local_level_key ||= :"logger_thread_safe_level_#{object_id}"
|
63
45
|
end
|
64
|
-
|
65
|
-
@logdev.write \
|
66
|
-
format_message(format_severity(severity), Time.now, progname, message)
|
67
|
-
end
|
68
46
|
end
|
69
47
|
end
|