Fix LogSubscriber for buffered event w/ nil logger
LogSubscriber overrides start/finish to avoid instrumenting when its logger is nil. In order to support buffered notification events, as used by async queries, we need to apply a similar override to LogSubscriber#publish_event.
This commit is contained in:
parent
6ce14ee4bc
commit
3a770b2197
|
@ -114,9 +114,13 @@ module ActiveSupport
|
||||||
def finish(name, id, payload)
|
def finish(name, id, payload)
|
||||||
super if logger
|
super if logger
|
||||||
rescue => e
|
rescue => e
|
||||||
if logger
|
log_exception(name, e)
|
||||||
logger.error "Could not log #{name.inspect} event. #{e.class}: #{e.message} #{e.backtrace}"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def publish_event(event)
|
||||||
|
super if logger
|
||||||
|
rescue => e
|
||||||
|
log_exception(event.name, e)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -138,5 +142,11 @@ module ActiveSupport
|
||||||
bold = bold ? BOLD : ""
|
bold = bold ? BOLD : ""
|
||||||
"#{bold}#{color}#{text}#{CLEAR}"
|
"#{bold}#{color}#{text}#{CLEAR}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def log_exception(name, e)
|
||||||
|
if logger
|
||||||
|
logger.error "Could not log #{name.inspect} event. #{e.class}: #{e.message} #{e.backtrace}"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -107,6 +107,17 @@ class SyncLogSubscriberTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_does_not_send_buffered_events_if_logger_is_nil
|
||||||
|
ActiveSupport::LogSubscriber.logger = nil
|
||||||
|
assert_not_called(@log_subscriber, :some_event) do
|
||||||
|
ActiveSupport::LogSubscriber.attach_to :my_log_subscriber, @log_subscriber
|
||||||
|
buffer = ActiveSupport::Notifications.instrumenter.buffer
|
||||||
|
buffer.instrument "some_event.my_log_subscriber"
|
||||||
|
buffer.flush
|
||||||
|
wait
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_does_not_fail_with_non_namespaced_events
|
def test_does_not_fail_with_non_namespaced_events
|
||||||
ActiveSupport::LogSubscriber.attach_to :my_log_subscriber, @log_subscriber
|
ActiveSupport::LogSubscriber.attach_to :my_log_subscriber, @log_subscriber
|
||||||
instrument "whatever"
|
instrument "whatever"
|
||||||
|
|
Loading…
Reference in New Issue