提交 e8e8da5c 编写于 作者: J José Valim

Logging thread should not die on logging errors.

上级 ec63fdcf
......@@ -63,7 +63,11 @@ def self.dispatch(args)
subscriber = subscribers[namespace.to_sym]
if subscriber.respond_to?(name) && subscriber.logger
subscriber.send(name, ActiveSupport::Notifications::Event.new(*args))
begin
subscriber.send(name, ActiveSupport::Notifications::Event.new(*args))
rescue Exception => e
Rails.logger.error "Could not log #{args[0].inspect} event. #{e.class}: #{e.message}"
end
end
if args[0] == "action_dispatch.after_dispatch" && !subscribers.empty?
......
......@@ -18,6 +18,10 @@ def foo(event)
def bar(event)
info "#{color("cool", :red)}, #{color("isn't it?", :blue, true)}"
end
def puke(event)
raise "puke"
end
end
module SubscriberTest
......@@ -105,6 +109,16 @@ def test_flushes_the_same_logger_just_once
assert_equal 1, @logger.flush_count
end
def test_logging_thread_does_not_die_on_failures
Rails::Subscriber.add :my_subscriber, @subscriber
instrument "my_subscriber.puke"
instrument "action_dispatch.after_dispatch"
wait
assert_equal 1, @logger.flush_count
assert_equal 1, @logger.logged(:error).size
assert_equal 'Could not log "my_subscriber.puke" event. RuntimeError: puke', @logger.logged(:error).last
end
def test_tails_logs_when_action_dispatch_callback_is_received
log_tailer = mock()
log_tailer.expects(:tail!)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册