Rename Rails::Subscriber to Rails::LogSubscriber
This commit is contained in:
parent
7cff54f5d3
commit
f0523f72b4
|
@ -9,8 +9,8 @@ module ActionMailer
|
||||||
ActionMailer::Base.send(:include, ActionController::UrlFor) if defined?(ActionController)
|
ActionMailer::Base.send(:include, ActionController::UrlFor) if defined?(ActionController)
|
||||||
end
|
end
|
||||||
|
|
||||||
require "action_mailer/railties/subscriber"
|
require "action_mailer/railties/log_subscriber"
|
||||||
subscriber ActionMailer::Railties::Subscriber.new
|
log_subscriber ActionMailer::Railties::LogSubscriber.new
|
||||||
|
|
||||||
initializer "action_mailer.logger" do
|
initializer "action_mailer.logger" do
|
||||||
ActionMailer::Base.logger ||= Rails.logger
|
ActionMailer::Base.logger ||= Rails.logger
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module ActionMailer
|
module ActionMailer
|
||||||
module Railties
|
module Railties
|
||||||
class Subscriber < Rails::Subscriber
|
class LogSubscriber < Rails::LogSubscriber
|
||||||
def deliver(event)
|
def deliver(event)
|
||||||
recipients = Array(event.payload[:to]).join(', ')
|
recipients = Array(event.payload[:to]).join(', ')
|
||||||
info("\nSent mail to #{recipients} (%1.fms)" % event.duration)
|
info("\nSent mail to #{recipients} (%1.fms)" % event.duration)
|
|
@ -1,10 +1,10 @@
|
||||||
require "abstract_unit"
|
require "abstract_unit"
|
||||||
require "rails/subscriber/test_helper"
|
require "rails/log_subscriber/test_helper"
|
||||||
require "action_mailer/railties/subscriber"
|
require "action_mailer/railties/log_subscriber"
|
||||||
|
|
||||||
class AMSubscriberTest < ActionMailer::TestCase
|
class AMLogSubscriberTest < ActionMailer::TestCase
|
||||||
include Rails::Subscriber::TestHelper
|
include Rails::LogSubscriber::TestHelper
|
||||||
Rails::Subscriber.add(:action_mailer, ActionMailer::Railties::Subscriber.new)
|
Rails::LogSubscriber.add(:action_mailer, ActionMailer::Railties::LogSubscriber.new)
|
||||||
|
|
||||||
class TestMailer < ActionMailer::Base
|
class TestMailer < ActionMailer::Base
|
||||||
def basic
|
def basic
|
|
@ -6,8 +6,8 @@ module ActionController
|
||||||
class Railtie < Rails::Railtie
|
class Railtie < Rails::Railtie
|
||||||
railtie_name :action_controller
|
railtie_name :action_controller
|
||||||
|
|
||||||
require "action_controller/railties/subscriber"
|
require "action_controller/railties/log_subscriber"
|
||||||
subscriber ActionController::Railties::Subscriber.new
|
log_subscriber ActionController::Railties::LogSubscriber.new
|
||||||
|
|
||||||
initializer "action_controller.logger" do
|
initializer "action_controller.logger" do
|
||||||
ActionController::Base.logger ||= Rails.logger
|
ActionController::Base.logger ||= Rails.logger
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module ActionController
|
module ActionController
|
||||||
module Railties
|
module Railties
|
||||||
class Subscriber < Rails::Subscriber
|
class LogSubscriber < Rails::LogSubscriber
|
||||||
INTERNAL_PARAMS = %w(controller action format _method only_path)
|
INTERNAL_PARAMS = %w(controller action format _method only_path)
|
||||||
|
|
||||||
def start_processing(event)
|
def start_processing(event)
|
|
@ -5,8 +5,8 @@ module ActionView
|
||||||
class Railtie < Rails::Railtie
|
class Railtie < Rails::Railtie
|
||||||
railtie_name :action_view
|
railtie_name :action_view
|
||||||
|
|
||||||
require "action_view/railties/subscriber"
|
require "action_view/railties/log_subscriber"
|
||||||
subscriber ActionView::Railties::Subscriber.new
|
log_subscriber ActionView::Railties::LogSubscriber.new
|
||||||
|
|
||||||
initializer "action_view.cache_asset_timestamps" do |app|
|
initializer "action_view.cache_asset_timestamps" do |app|
|
||||||
unless app.config.cache_classes
|
unless app.config.cache_classes
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module ActionView
|
module ActionView
|
||||||
module Railties
|
module Railties
|
||||||
class Subscriber < Rails::Subscriber
|
class LogSubscriber < Rails::LogSubscriber
|
||||||
def render_template(event)
|
def render_template(event)
|
||||||
message = "Rendered #{from_rails_root(event.payload[:identifier])}"
|
message = "Rendered #{from_rails_root(event.payload[:identifier])}"
|
||||||
message << " within #{from_rails_root(event.payload[:layout])}" if event.payload[:layout]
|
message << " within #{from_rails_root(event.payload[:layout])}" if event.payload[:layout]
|
|
@ -1,30 +1,30 @@
|
||||||
require 'active_record_unit'
|
require 'active_record_unit'
|
||||||
require 'active_record/railties/controller_runtime'
|
require 'active_record/railties/controller_runtime'
|
||||||
require 'fixtures/project'
|
require 'fixtures/project'
|
||||||
require 'rails/subscriber/test_helper'
|
require 'rails/log_subscriber/test_helper'
|
||||||
require 'action_controller/railties/subscriber'
|
require 'action_controller/railties/log_subscriber'
|
||||||
|
|
||||||
ActionController::Base.send :include, ActiveRecord::Railties::ControllerRuntime
|
ActionController::Base.send :include, ActiveRecord::Railties::ControllerRuntime
|
||||||
|
|
||||||
class ControllerRuntimeSubscriberTest < ActionController::TestCase
|
class ControllerRuntimeLogSubscriberTest < ActionController::TestCase
|
||||||
class SubscriberController < ActionController::Base
|
class LogSubscriberController < ActionController::Base
|
||||||
def show
|
def show
|
||||||
render :inline => "<%= Project.all %>"
|
render :inline => "<%= Project.all %>"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
include Rails::Subscriber::TestHelper
|
include Rails::LogSubscriber::TestHelper
|
||||||
tests SubscriberController
|
tests LogSubscriberController
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@old_logger = ActionController::Base.logger
|
@old_logger = ActionController::Base.logger
|
||||||
Rails::Subscriber.add(:action_controller, ActionController::Railties::Subscriber.new)
|
Rails::LogSubscriber.add(:action_controller, ActionController::Railties::LogSubscriber.new)
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
def teardown
|
def teardown
|
||||||
super
|
super
|
||||||
Rails::Subscriber.subscribers.clear
|
Rails::LogSubscriber.log_subscribers.clear
|
||||||
ActionController::Base.logger = @old_logger
|
ActionController::Base.logger = @old_logger
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
require "abstract_unit"
|
require "abstract_unit"
|
||||||
require "rails/subscriber/test_helper"
|
require "rails/log_subscriber/test_helper"
|
||||||
require "action_controller/railties/subscriber"
|
require "action_controller/railties/log_subscriber"
|
||||||
|
|
||||||
module Another
|
module Another
|
||||||
class SubscribersController < ActionController::Base
|
class LogSubscribersController < ActionController::Base
|
||||||
def show
|
def show
|
||||||
render :nothing => true
|
render :nothing => true
|
||||||
end
|
end
|
||||||
|
@ -35,9 +35,9 @@ module Another
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class ACSubscriberTest < ActionController::TestCase
|
class ACLogSubscriberTest < ActionController::TestCase
|
||||||
tests Another::SubscribersController
|
tests Another::LogSubscribersController
|
||||||
include Rails::Subscriber::TestHelper
|
include Rails::LogSubscriber::TestHelper
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@old_logger = ActionController::Base.logger
|
@old_logger = ActionController::Base.logger
|
||||||
|
@ -46,13 +46,13 @@ class ACSubscriberTest < ActionController::TestCase
|
||||||
ActionController::Base.page_cache_directory = @cache_path
|
ActionController::Base.page_cache_directory = @cache_path
|
||||||
ActionController::Base.cache_store = :file_store, @cache_path
|
ActionController::Base.cache_store = :file_store, @cache_path
|
||||||
|
|
||||||
Rails::Subscriber.add(:action_controller, ActionController::Railties::Subscriber.new)
|
Rails::LogSubscriber.add(:action_controller, ActionController::Railties::LogSubscriber.new)
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
def teardown
|
def teardown
|
||||||
super
|
super
|
||||||
Rails::Subscriber.subscribers.clear
|
Rails::LogSubscriber.log_subscribers.clear
|
||||||
FileUtils.rm_rf(@cache_path)
|
FileUtils.rm_rf(@cache_path)
|
||||||
ActionController::Base.logger = @old_logger
|
ActionController::Base.logger = @old_logger
|
||||||
end
|
end
|
||||||
|
@ -65,7 +65,7 @@ class ACSubscriberTest < ActionController::TestCase
|
||||||
get :show
|
get :show
|
||||||
wait
|
wait
|
||||||
assert_equal 2, logs.size
|
assert_equal 2, logs.size
|
||||||
assert_equal "Processing by Another::SubscribersController#show as HTML", logs.first
|
assert_equal "Processing by Another::LogSubscribersController#show as HTML", logs.first
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_process_action
|
def test_process_action
|
|
@ -1,22 +1,22 @@
|
||||||
require "abstract_unit"
|
require "abstract_unit"
|
||||||
require "rails/subscriber/test_helper"
|
require "rails/log_subscriber/test_helper"
|
||||||
require "action_view/railties/subscriber"
|
require "action_view/railties/log_subscriber"
|
||||||
require "controller/fake_models"
|
require "controller/fake_models"
|
||||||
|
|
||||||
class AVSubscriberTest < ActiveSupport::TestCase
|
class AVLogSubscriberTest < ActiveSupport::TestCase
|
||||||
include Rails::Subscriber::TestHelper
|
include Rails::LogSubscriber::TestHelper
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@old_logger = ActionController::Base.logger
|
@old_logger = ActionController::Base.logger
|
||||||
@view = ActionView::Base.new(ActionController::Base.view_paths, {})
|
@view = ActionView::Base.new(ActionController::Base.view_paths, {})
|
||||||
Rails.stubs(:root).returns(File.expand_path(FIXTURE_LOAD_PATH))
|
Rails.stubs(:root).returns(File.expand_path(FIXTURE_LOAD_PATH))
|
||||||
Rails::Subscriber.add(:action_view, ActionView::Railties::Subscriber.new)
|
Rails::LogSubscriber.add(:action_view, ActionView::Railties::LogSubscriber.new)
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
def teardown
|
def teardown
|
||||||
super
|
super
|
||||||
Rails::Subscriber.subscribers.clear
|
Rails::LogSubscriber.log_subscribers.clear
|
||||||
ActionController::Base.logger = @old_logger
|
ActionController::Base.logger = @old_logger
|
||||||
end
|
end
|
||||||
|
|
|
@ -552,7 +552,7 @@ module ActiveRecord #:nodoc:
|
||||||
def colorize_logging(*args)
|
def colorize_logging(*args)
|
||||||
ActiveSupport::Deprecation.warn "ActiveRecord::Base.colorize_logging and " <<
|
ActiveSupport::Deprecation.warn "ActiveRecord::Base.colorize_logging and " <<
|
||||||
"config.active_record.colorize_logging are deprecated. Please use " <<
|
"config.active_record.colorize_logging are deprecated. Please use " <<
|
||||||
"Rails::Subscriber.colorize_logging or config.colorize_logging instead", caller
|
"Rails::LogSubscriber.colorize_logging or config.colorize_logging instead", caller
|
||||||
end
|
end
|
||||||
alias :colorize_logging= :colorize_logging
|
alias :colorize_logging= :colorize_logging
|
||||||
|
|
||||||
|
|
|
@ -20,8 +20,8 @@ module ActiveRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO If we require the wrong file, the error never comes up.
|
# TODO If we require the wrong file, the error never comes up.
|
||||||
require "active_record/railties/subscriber"
|
require "active_record/railties/log_subscriber"
|
||||||
subscriber ActiveRecord::Railties::Subscriber.new
|
log_subscriber ActiveRecord::Railties::LogSubscriber.new
|
||||||
|
|
||||||
initializer "active_record.initialize_timezone" do
|
initializer "active_record.initialize_timezone" do
|
||||||
ActiveRecord::Base.time_zone_aware_attributes = true
|
ActiveRecord::Base.time_zone_aware_attributes = true
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module ActiveRecord
|
module ActiveRecord
|
||||||
module Railties
|
module Railties
|
||||||
class Subscriber < Rails::Subscriber
|
class LogSubscriber < Rails::LogSubscriber
|
||||||
def sql(event)
|
def sql(event)
|
||||||
name = '%s (%.1fms)' % [event.payload[:name], event.duration]
|
name = '%s (%.1fms)' % [event.payload[:name], event.duration]
|
||||||
sql = event.payload[:sql].squeeze(' ')
|
sql = event.payload[:sql].squeeze(' ')
|
|
@ -1,11 +1,11 @@
|
||||||
require "cases/helper"
|
require "cases/helper"
|
||||||
require "models/developer"
|
require "models/developer"
|
||||||
require "rails/subscriber/test_helper"
|
require "rails/log_subscriber/test_helper"
|
||||||
require "active_record/railties/subscriber"
|
require "active_record/railties/log_subscriber"
|
||||||
|
|
||||||
class SubscriberTest < ActiveSupport::TestCase
|
class LogSubscriberTest < ActiveSupport::TestCase
|
||||||
include Rails::Subscriber::TestHelper
|
include Rails::LogSubscriber::TestHelper
|
||||||
Rails::Subscriber.add(:active_record, ActiveRecord::Railties::Subscriber.new)
|
Rails::LogSubscriber.add(:active_record, ActiveRecord::Railties::LogSubscriber.new)
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@old_logger = ActiveRecord::Base.logger
|
@old_logger = ActiveRecord::Base.logger
|
|
@ -5,8 +5,8 @@ module ActiveResource
|
||||||
class Railtie < Rails::Railtie
|
class Railtie < Rails::Railtie
|
||||||
railtie_name :active_resource
|
railtie_name :active_resource
|
||||||
|
|
||||||
require "active_resource/railties/subscriber"
|
require "active_resource/railties/log_subscriber"
|
||||||
subscriber ActiveResource::Railties::Subscriber.new
|
log_subscriber ActiveResource::Railties::LogSubscriber.new
|
||||||
|
|
||||||
initializer "active_resource.set_configs" do |app|
|
initializer "active_resource.set_configs" do |app|
|
||||||
app.config.active_resource.each do |k,v|
|
app.config.active_resource.each do |k,v|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module ActiveResource
|
module ActiveResource
|
||||||
module Railties
|
module Railties
|
||||||
class Subscriber < Rails::Subscriber
|
class LogSubscriber < Rails::LogSubscriber
|
||||||
def request(event)
|
def request(event)
|
||||||
result = event.payload[:result]
|
result = event.payload[:result]
|
||||||
info "#{event.payload[:method].to_s.upcase} #{event.payload[:request_uri]}"
|
info "#{event.payload[:method].to_s.upcase} #{event.payload[:request_uri]}"
|
|
@ -1,12 +1,12 @@
|
||||||
require "abstract_unit"
|
require "abstract_unit"
|
||||||
require "fixtures/person"
|
require "fixtures/person"
|
||||||
require "rails/subscriber/test_helper"
|
require "rails/log_subscriber/test_helper"
|
||||||
require "active_resource/railties/subscriber"
|
require "active_resource/railties/log_subscriber"
|
||||||
require "active_support/core_ext/hash/conversions"
|
require "active_support/core_ext/hash/conversions"
|
||||||
|
|
||||||
class SubscriberTest < ActiveSupport::TestCase
|
class LogSubscriberTest < ActiveSupport::TestCase
|
||||||
include Rails::Subscriber::TestHelper
|
include Rails::LogSubscriber::TestHelper
|
||||||
Rails::Subscriber.add(:active_resource, ActiveResource::Railties::Subscriber.new)
|
Rails::LogSubscriber.add(:active_resource, ActiveResource::Railties::LogSubscriber.new)
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@matz = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person')
|
@matz = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person')
|
|
@ -9,7 +9,7 @@ module ActiveSupport
|
||||||
# end
|
# end
|
||||||
#
|
#
|
||||||
# You can consume those events and the information they provide by registering
|
# You can consume those events and the information they provide by registering
|
||||||
# a subscriber. For instance, let's store all instrumented events in an array:
|
# a log subscriber. For instance, let's store all instrumented events in an array:
|
||||||
#
|
#
|
||||||
# @events = []
|
# @events = []
|
||||||
#
|
#
|
||||||
|
@ -35,7 +35,7 @@ module ActiveSupport
|
||||||
# end
|
# end
|
||||||
#
|
#
|
||||||
# Notifications ships with a queue implementation that consumes and publish events
|
# Notifications ships with a queue implementation that consumes and publish events
|
||||||
# to subscribers in a thread. You can use any queue implementation you want.
|
# to log subscribers in a thread. You can use any queue implementation you want.
|
||||||
#
|
#
|
||||||
module Notifications
|
module Notifications
|
||||||
autoload :Instrumenter, 'active_support/notifications/instrumenter'
|
autoload :Instrumenter, 'active_support/notifications/instrumenter'
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
module ActiveSupport
|
module ActiveSupport
|
||||||
module Notifications
|
module Notifications
|
||||||
# This is a default queue implementation that ships with Notifications. It
|
# This is a default queue implementation that ships with Notifications. It
|
||||||
# just pushes events to all registered subscribers.
|
# just pushes events to all registered log subscribers.
|
||||||
class Fanout
|
class Fanout
|
||||||
def initialize
|
def initialize
|
||||||
@subscribers = []
|
@log_subscribers = []
|
||||||
end
|
end
|
||||||
|
|
||||||
def bind(pattern)
|
def bind(pattern)
|
||||||
|
@ -12,11 +12,11 @@ module ActiveSupport
|
||||||
end
|
end
|
||||||
|
|
||||||
def subscribe(pattern = nil, &block)
|
def subscribe(pattern = nil, &block)
|
||||||
@subscribers << Subscriber.new(pattern, &block)
|
@log_subscribers << LogSubscriber.new(pattern, &block)
|
||||||
end
|
end
|
||||||
|
|
||||||
def publish(*args)
|
def publish(*args)
|
||||||
@subscribers.each { |s| s.publish(*args) }
|
@log_subscribers.each { |s| s.publish(*args) }
|
||||||
end
|
end
|
||||||
|
|
||||||
# This is a sync queue, so there is not waiting.
|
# This is a sync queue, so there is not waiting.
|
||||||
|
@ -41,7 +41,7 @@ module ActiveSupport
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Subscriber #:nodoc:
|
class LogSubscriber #:nodoc:
|
||||||
def initialize(pattern, &block)
|
def initialize(pattern, &block)
|
||||||
@pattern = pattern
|
@pattern = pattern
|
||||||
@block = block
|
@block = block
|
||||||
|
|
|
@ -26,7 +26,7 @@ module Notifications
|
||||||
assert_equal [[:foo]], @events
|
assert_equal [[:foo]], @events
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_subscriber_with_pattern
|
def test_log_subscriber_with_pattern
|
||||||
events = []
|
events = []
|
||||||
@notifier.subscribe('1') { |*args| events << args }
|
@notifier.subscribe('1') { |*args| events << args }
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ module Notifications
|
||||||
assert_equal [['1'], ['1.a']], events
|
assert_equal [['1'], ['1.a']], events
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_subscriber_with_pattern_as_regexp
|
def test_log_subscriber_with_pattern_as_regexp
|
||||||
events = []
|
events = []
|
||||||
@notifier.subscribe(/\d/) { |*args| events << args }
|
@notifier.subscribe(/\d/) { |*args| events << args }
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ module Notifications
|
||||||
assert_equal [['1'], ['a.1'], ['1.a']], events
|
assert_equal [['1'], ['a.1'], ['1.a']], events
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_multiple_subscribers
|
def test_multiple_log_subscribers
|
||||||
@another = []
|
@another = []
|
||||||
@notifier.subscribe { |*args| @another << args }
|
@notifier.subscribe { |*args| @another << args }
|
||||||
@notifier.publish :foo
|
@notifier.publish :foo
|
||||||
|
|
|
@ -435,7 +435,7 @@ As well as the following deprecations:
|
||||||
* I18n error messages for ActiveRecord should be changed from :en.activerecord.errors.template to <tt>:en.errors.template</tt>.
|
* I18n error messages for ActiveRecord should be changed from :en.activerecord.errors.template to <tt>:en.errors.template</tt>.
|
||||||
* <tt>model.errors.on</tt> is deprecated in favour of <tt>model.errors[]</tt>
|
* <tt>model.errors.on</tt> is deprecated in favour of <tt>model.errors[]</tt>
|
||||||
* validates_presence_of => validates... :presence => true
|
* validates_presence_of => validates... :presence => true
|
||||||
* <tt>ActiveRecord::Base.colorize_logging</tt> and <tt>config.active_record.colorize_logging</tt> are deprecated in favour of <tt>Rails::Subscriber.colorize_logging</tt> or <tt>config.colorize_logging</tt>
|
* <tt>ActiveRecord::Base.colorize_logging</tt> and <tt>config.active_record.colorize_logging</tt> are deprecated in favour of <tt>Rails::LogSubscriber.colorize_logging</tt> or <tt>config.colorize_logging</tt>
|
||||||
|
|
||||||
NOTE: While an implementation of State Machine has been in Active Record edge for some months now, it has been removed from the Rails 3.0 release.
|
NOTE: While an implementation of State Machine has been in Active Record edge for some months now, it has been removed from the Rails 3.0 release.
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ require 'active_support/core_ext/logger'
|
||||||
require 'rails/application'
|
require 'rails/application'
|
||||||
require 'rails/version'
|
require 'rails/version'
|
||||||
require 'rails/deprecation'
|
require 'rails/deprecation'
|
||||||
require 'rails/subscriber'
|
require 'rails/log_subscriber'
|
||||||
require 'rails/ruby_version_check'
|
require 'rails/ruby_version_check'
|
||||||
|
|
||||||
require 'active_support/railtie'
|
require 'active_support/railtie'
|
||||||
|
|
|
@ -49,17 +49,17 @@ module Rails
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Initialize rails subscriber on top of notifications.
|
# Initialize rails log subscriber on top of notifications.
|
||||||
initializer :initialize_subscriber do
|
initializer :initialize_log_subscriber do
|
||||||
require 'active_support/notifications'
|
require 'active_support/notifications'
|
||||||
|
|
||||||
if config.colorize_logging == false
|
if config.colorize_logging == false
|
||||||
Rails::Subscriber.colorize_logging = false
|
Rails::LogSubscriber.colorize_logging = false
|
||||||
config.generators.colorize_logging = false
|
config.generators.colorize_logging = false
|
||||||
end
|
end
|
||||||
|
|
||||||
ActiveSupport::Notifications.subscribe do |*args|
|
ActiveSupport::Notifications.subscribe do |*args|
|
||||||
Rails::Subscriber.dispatch(args)
|
Rails::LogSubscriber.dispatch(args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,15 +2,15 @@ require 'active_support/core_ext/class/inheritable_attributes'
|
||||||
require 'active_support/notifications'
|
require 'active_support/notifications'
|
||||||
|
|
||||||
module Rails
|
module Rails
|
||||||
# Rails::Subscriber is an object set to consume ActiveSupport::Notifications
|
# Rails::LogSubscriber is an object set to consume ActiveSupport::Notifications
|
||||||
# on initialization with solely purpose of logging. The subscriber dispatches
|
# on initialization with solely purpose of logging. The log subscriber dispatches
|
||||||
# notifications to a regirested object based on its given namespace.
|
# notifications to a regirested object based on its given namespace.
|
||||||
#
|
#
|
||||||
# An example would be ActiveRecord subscriber responsible for logging queries:
|
# An example would be ActiveRecord log subscriber responsible for logging queries:
|
||||||
#
|
#
|
||||||
# module ActiveRecord
|
# module ActiveRecord
|
||||||
# class Railtie
|
# class Railtie
|
||||||
# class Subscriber < Rails::Subscriber
|
# class LogSubscriber < Rails::LogSubscriber
|
||||||
# def sql(event)
|
# def sql(event)
|
||||||
# "#{event.payload[:name]} (#{event.duration}) #{event.payload[:sql]}"
|
# "#{event.payload[:name]} (#{event.duration}) #{event.payload[:sql]}"
|
||||||
# end
|
# end
|
||||||
|
@ -20,19 +20,19 @@ module Rails
|
||||||
#
|
#
|
||||||
# It's finally registed as:
|
# It's finally registed as:
|
||||||
#
|
#
|
||||||
# Rails::Subscriber.add :active_record, ActiveRecord::Railtie::Subscriber.new
|
# Rails::LogSubscriber.add :active_record, ActiveRecord::Railtie::LogSubscriber.new
|
||||||
#
|
#
|
||||||
# So whenever a "active_record.sql" notification arrive to Rails::Subscriber,
|
# So whenever a "active_record.sql" notification arrive to Rails::LogSubscriber,
|
||||||
# it will properly dispatch the event (ActiveSupport::Notifications::Event) to
|
# it will properly dispatch the event (ActiveSupport::Notifications::Event) to
|
||||||
# the sql method.
|
# the sql method.
|
||||||
#
|
#
|
||||||
# This is useful because it avoids spanning several subscribers just for logging
|
# This is useful because it avoids spanning several log subscribers just for logging
|
||||||
# purposes(which slows down the main thread). Besides of providing a centralized
|
# purposes(which slows down the main thread). Besides of providing a centralized
|
||||||
# facility on top of Rails.logger.
|
# facility on top of Rails.logger.
|
||||||
#
|
#
|
||||||
# Subscriber also has some helpers to deal with logging and automatically flushes
|
# Log subscriber also has some helpers to deal with logging and automatically flushes
|
||||||
# all logs when the request finishes (via action_dispatch.callback notification).
|
# all logs when the request finishes (via action_dispatch.callback notification).
|
||||||
class Subscriber
|
class LogSubscriber
|
||||||
mattr_accessor :colorize_logging
|
mattr_accessor :colorize_logging
|
||||||
self.colorize_logging = true
|
self.colorize_logging = true
|
||||||
|
|
||||||
|
@ -50,30 +50,30 @@ module Rails
|
||||||
CYAN = "\e[36m"
|
CYAN = "\e[36m"
|
||||||
WHITE = "\e[37m"
|
WHITE = "\e[37m"
|
||||||
|
|
||||||
def self.add(namespace, subscriber)
|
def self.add(namespace, log_subscriber)
|
||||||
subscribers[namespace.to_sym] = subscriber
|
log_subscribers[namespace.to_sym] = log_subscriber
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.subscribers
|
def self.log_subscribers
|
||||||
@subscribers ||= {}
|
@log_subscribers ||= {}
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.dispatch(args)
|
def self.dispatch(args)
|
||||||
namespace, name = args[0].split(".")
|
namespace, name = args[0].split(".")
|
||||||
subscriber = subscribers[namespace.to_sym]
|
log_subscriber = log_subscribers[namespace.to_sym]
|
||||||
|
|
||||||
if subscriber.respond_to?(name) && subscriber.logger
|
if log_subscriber.respond_to?(name) && log_subscriber.logger
|
||||||
begin
|
begin
|
||||||
subscriber.send(name, ActiveSupport::Notifications::Event.new(*args))
|
log_subscriber.send(name, ActiveSupport::Notifications::Event.new(*args))
|
||||||
rescue Exception => e
|
rescue Exception => e
|
||||||
Rails.logger.error "Could not log #{args[0].inspect} event. #{e.class}: #{e.message}"
|
Rails.logger.error "Could not log #{args[0].inspect} event. #{e.class}: #{e.message}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Flush all subscribers' logger.
|
# Flush all log_subscribers' logger.
|
||||||
def self.flush_all!
|
def self.flush_all!
|
||||||
loggers = subscribers.values.map(&:logger)
|
loggers = log_subscribers.values.map(&:logger)
|
||||||
loggers.uniq!
|
loggers.uniq!
|
||||||
loggers.each { |l| l.flush if l.respond_to?(:flush) }
|
loggers.each { |l| l.flush if l.respond_to?(:flush) }
|
||||||
end
|
end
|
|
@ -1,13 +1,13 @@
|
||||||
require 'rails/subscriber'
|
require 'rails/log_subscriber'
|
||||||
|
|
||||||
module Rails
|
module Rails
|
||||||
class Subscriber
|
class LogSubscriber
|
||||||
# Provides some helpers to deal with testing subscribers by setting up
|
# Provides some helpers to deal with testing log subscribers by setting up
|
||||||
# notifications. Take for instance ActiveRecord subscriber tests:
|
# notifications. Take for instance ActiveRecord subscriber tests:
|
||||||
#
|
#
|
||||||
# class SyncSubscriberTest < ActiveSupport::TestCase
|
# class SyncLogSubscriberTest < ActiveSupport::TestCase
|
||||||
# include Rails::Subscriber::TestHelper
|
# include Rails::LogSubscriber::TestHelper
|
||||||
# Rails::Subscriber.add(:active_record, ActiveRecord::Railties::Subscriber.new)
|
# Rails::LogSubscriber.add(:active_record, ActiveRecord::Railties::LogSubscriber.new)
|
||||||
#
|
#
|
||||||
# def test_basic_query_logging
|
# def test_basic_query_logging
|
||||||
# Developer.all
|
# Developer.all
|
||||||
|
@ -17,18 +17,18 @@ module Rails
|
||||||
# assert_match /SELECT \* FROM "developers"/, @logger.logged(:debug).last
|
# assert_match /SELECT \* FROM "developers"/, @logger.logged(:debug).last
|
||||||
# end
|
# end
|
||||||
#
|
#
|
||||||
# class SyncSubscriberTest < ActiveSupport::TestCase
|
# class SyncLogSubscriberTest < ActiveSupport::TestCase
|
||||||
# include Rails::Subscriber::SyncTestHelper
|
# include Rails::LogSubscriber::SyncTestHelper
|
||||||
# include SubscriberTest
|
# include LogSubscriberTest
|
||||||
# end
|
# end
|
||||||
#
|
#
|
||||||
# class AsyncSubscriberTest < ActiveSupport::TestCase
|
# class AsyncLogSubscriberTest < ActiveSupport::TestCase
|
||||||
# include Rails::Subscriber::AsyncTestHelper
|
# include Rails::LogSubscriber::AsyncTestHelper
|
||||||
# include SubscriberTest
|
# include LogSubscriberTest
|
||||||
# end
|
# end
|
||||||
# end
|
# end
|
||||||
#
|
#
|
||||||
# All you need to do is to ensure that your subscriber is added to Rails::Subscriber,
|
# All you need to do is to ensure that your log subscriber is added to Rails::Subscriber,
|
||||||
# as in the second line of the code above. The test helpers is reponsible for setting
|
# as in the second line of the code above. The test helpers is reponsible for setting
|
||||||
# up the queue, subscriptions and turning colors in logs off.
|
# up the queue, subscriptions and turning colors in logs off.
|
||||||
#
|
#
|
||||||
|
@ -42,8 +42,8 @@ module Rails
|
||||||
@logger = MockLogger.new
|
@logger = MockLogger.new
|
||||||
@notifier = ActiveSupport::Notifications::Notifier.new(queue)
|
@notifier = ActiveSupport::Notifications::Notifier.new(queue)
|
||||||
|
|
||||||
Rails::Subscriber.colorize_logging = false
|
Rails::LogSubscriber.colorize_logging = false
|
||||||
@notifier.subscribe { |*args| Rails::Subscriber.dispatch(args) }
|
@notifier.subscribe { |*args| Rails::LogSubscriber.dispatch(args) }
|
||||||
|
|
||||||
set_logger(@logger)
|
set_logger(@logger)
|
||||||
ActiveSupport::Notifications.notifier = @notifier
|
ActiveSupport::Notifications.notifier = @notifier
|
||||||
|
@ -80,7 +80,7 @@ module Rails
|
||||||
@notifier.wait
|
@notifier.wait
|
||||||
end
|
end
|
||||||
|
|
||||||
# Overwrite if you use another logger in your subscriber:
|
# Overwrite if you use another logger in your log subscriber:
|
||||||
#
|
#
|
||||||
# def logger
|
# def logger
|
||||||
# ActiveRecord::Base.logger = @logger
|
# ActiveRecord::Base.logger = @logger
|
|
@ -1,9 +1,9 @@
|
||||||
require 'rails/subscriber'
|
require 'rails/log_subscriber'
|
||||||
|
|
||||||
module Rails
|
module Rails
|
||||||
module Rack
|
module Rack
|
||||||
# Log the request started and flush all loggers after it.
|
# Log the request started and flush all loggers after it.
|
||||||
class Logger < Rails::Subscriber
|
class Logger < Rails::LogSubscriber
|
||||||
def initialize(app)
|
def initialize(app)
|
||||||
@app = app
|
@app = app
|
||||||
end
|
end
|
||||||
|
@ -26,7 +26,7 @@ module Rails
|
||||||
end
|
end
|
||||||
|
|
||||||
def after_dispatch(env)
|
def after_dispatch(env)
|
||||||
Rails::Subscriber.flush_all!
|
Rails::LogSubscriber.flush_all!
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -32,8 +32,8 @@ module Rails
|
||||||
subclasses.map { |p| p.railtie_name }
|
subclasses.map { |p| p.railtie_name }
|
||||||
end
|
end
|
||||||
|
|
||||||
def subscriber(subscriber)
|
def log_subscriber(log_subscriber)
|
||||||
Rails::Subscriber.add(railtie_name, subscriber)
|
Rails::LogSubscriber.add(railtie_name, log_subscriber)
|
||||||
end
|
end
|
||||||
|
|
||||||
def rake_tasks(&blk)
|
def rake_tasks(&blk)
|
||||||
|
|
|
@ -28,7 +28,7 @@ module ApplicationTests
|
||||||
ActiveSupport::Notifications.notifier.wait
|
ActiveSupport::Notifications.notifier.wait
|
||||||
end
|
end
|
||||||
|
|
||||||
test "rails subscribers are added" do
|
test "rails log_subscribers are added" do
|
||||||
add_to_config <<-RUBY
|
add_to_config <<-RUBY
|
||||||
config.colorize_logging = false
|
config.colorize_logging = false
|
||||||
RUBY
|
RUBY
|
||||||
|
|
|
@ -0,0 +1,119 @@
|
||||||
|
require 'abstract_unit'
|
||||||
|
require 'rails/log_subscriber/test_helper'
|
||||||
|
|
||||||
|
class MyLogSubscriber < Rails::LogSubscriber
|
||||||
|
attr_reader :event
|
||||||
|
|
||||||
|
def some_event(event)
|
||||||
|
@event = event
|
||||||
|
info event.name
|
||||||
|
end
|
||||||
|
|
||||||
|
def foo(event)
|
||||||
|
debug "debug"
|
||||||
|
info "info"
|
||||||
|
warn "warn"
|
||||||
|
end
|
||||||
|
|
||||||
|
def bar(event)
|
||||||
|
info "#{color("cool", :red)}, #{color("isn't it?", :blue, true)}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def puke(event)
|
||||||
|
raise "puke"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class SyncLogSubscriberTest < ActiveSupport::TestCase
|
||||||
|
include Rails::LogSubscriber::TestHelper
|
||||||
|
|
||||||
|
def setup
|
||||||
|
super
|
||||||
|
@log_subscriber = MyLogSubscriber.new
|
||||||
|
Rails::LogSubscriber.instance_variable_set(:@log_tailer, nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
def teardown
|
||||||
|
super
|
||||||
|
Rails::LogSubscriber.log_subscribers.clear
|
||||||
|
Rails::LogSubscriber.instance_variable_set(:@log_tailer, nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
def instrument(*args, &block)
|
||||||
|
ActiveSupport::Notifications.instrument(*args, &block)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_proxies_method_to_rails_logger
|
||||||
|
@log_subscriber.foo(nil)
|
||||||
|
assert_equal %w(debug), @logger.logged(:debug)
|
||||||
|
assert_equal %w(info), @logger.logged(:info)
|
||||||
|
assert_equal %w(warn), @logger.logged(:warn)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_set_color_for_messages
|
||||||
|
Rails::LogSubscriber.colorize_logging = true
|
||||||
|
@log_subscriber.bar(nil)
|
||||||
|
assert_equal "\e[31mcool\e[0m, \e[1m\e[34misn't it?\e[0m", @logger.logged(:info).last
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_does_not_set_color_if_colorize_logging_is_set_to_false
|
||||||
|
@log_subscriber.bar(nil)
|
||||||
|
assert_equal "cool, isn't it?", @logger.logged(:info).last
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_event_is_sent_to_the_registered_class
|
||||||
|
Rails::LogSubscriber.add :my_log_subscriber, @log_subscriber
|
||||||
|
instrument "my_log_subscriber.some_event"
|
||||||
|
wait
|
||||||
|
assert_equal %w(my_log_subscriber.some_event), @logger.logged(:info)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_event_is_an_active_support_notifications_event
|
||||||
|
Rails::LogSubscriber.add :my_log_subscriber, @log_subscriber
|
||||||
|
instrument "my_log_subscriber.some_event"
|
||||||
|
wait
|
||||||
|
assert_kind_of ActiveSupport::Notifications::Event, @log_subscriber.event
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_does_not_send_the_event_if_it_doesnt_match_the_class
|
||||||
|
Rails::LogSubscriber.add :my_log_subscriber, @log_subscriber
|
||||||
|
instrument "my_log_subscriber.unknown_event"
|
||||||
|
wait
|
||||||
|
# If we get here, it means that NoMethodError was raised.
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_does_not_send_the_event_if_logger_is_nil
|
||||||
|
Rails.logger = nil
|
||||||
|
@log_subscriber.expects(:some_event).never
|
||||||
|
Rails::LogSubscriber.add :my_log_subscriber, @log_subscriber
|
||||||
|
instrument "my_log_subscriber.some_event"
|
||||||
|
wait
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_flushes_loggers
|
||||||
|
Rails::LogSubscriber.add :my_log_subscriber, @log_subscriber
|
||||||
|
Rails::LogSubscriber.flush_all!
|
||||||
|
assert_equal 1, @logger.flush_count
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_flushes_the_same_logger_just_once
|
||||||
|
Rails::LogSubscriber.add :my_log_subscriber, @log_subscriber
|
||||||
|
Rails::LogSubscriber.add :another, @log_subscriber
|
||||||
|
Rails::LogSubscriber.flush_all!
|
||||||
|
wait
|
||||||
|
assert_equal 1, @logger.flush_count
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_logging_does_not_die_on_failures
|
||||||
|
Rails::LogSubscriber.add :my_log_subscriber, @log_subscriber
|
||||||
|
instrument "my_log_subscriber.puke"
|
||||||
|
instrument "my_log_subscriber.some_event"
|
||||||
|
wait
|
||||||
|
|
||||||
|
assert_equal 1, @logger.logged(:info).size
|
||||||
|
assert_equal 'my_log_subscriber.some_event', @logger.logged(:info).last
|
||||||
|
|
||||||
|
assert_equal 1, @logger.logged(:error).size
|
||||||
|
assert_equal 'Could not log "my_log_subscriber.puke" event. RuntimeError: puke', @logger.logged(:error).last
|
||||||
|
end
|
||||||
|
end
|
|
@ -51,12 +51,12 @@ module RailtiesTest
|
||||||
assert_equal "bar", Bar.config.foo.bar
|
assert_equal "bar", Bar.config.foo.bar
|
||||||
end
|
end
|
||||||
|
|
||||||
test "railtie can add subscribers" do
|
test "railtie can add log subscribers" do
|
||||||
begin
|
begin
|
||||||
class Foo < Rails::Railtie ; subscriber(Rails::Subscriber.new) ; end
|
class Foo < Rails::Railtie ; log_subscriber(Rails::LogSubscriber.new) ; end
|
||||||
assert_kind_of Rails::Subscriber, Rails::Subscriber.subscribers[:foo]
|
assert_kind_of Rails::LogSubscriber, Rails::LogSubscriber.log_subscribers[:foo]
|
||||||
ensure
|
ensure
|
||||||
Rails::Subscriber.subscribers.clear
|
Rails::LogSubscriber.log_subscribers.clear
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,119 +0,0 @@
|
||||||
require 'abstract_unit'
|
|
||||||
require 'rails/subscriber/test_helper'
|
|
||||||
|
|
||||||
class MySubscriber < Rails::Subscriber
|
|
||||||
attr_reader :event
|
|
||||||
|
|
||||||
def some_event(event)
|
|
||||||
@event = event
|
|
||||||
info event.name
|
|
||||||
end
|
|
||||||
|
|
||||||
def foo(event)
|
|
||||||
debug "debug"
|
|
||||||
info "info"
|
|
||||||
warn "warn"
|
|
||||||
end
|
|
||||||
|
|
||||||
def bar(event)
|
|
||||||
info "#{color("cool", :red)}, #{color("isn't it?", :blue, true)}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def puke(event)
|
|
||||||
raise "puke"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class SyncSubscriberTest < ActiveSupport::TestCase
|
|
||||||
include Rails::Subscriber::TestHelper
|
|
||||||
|
|
||||||
def setup
|
|
||||||
super
|
|
||||||
@subscriber = MySubscriber.new
|
|
||||||
Rails::Subscriber.instance_variable_set(:@log_tailer, nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
def teardown
|
|
||||||
super
|
|
||||||
Rails::Subscriber.subscribers.clear
|
|
||||||
Rails::Subscriber.instance_variable_set(:@log_tailer, nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
def instrument(*args, &block)
|
|
||||||
ActiveSupport::Notifications.instrument(*args, &block)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_proxies_method_to_rails_logger
|
|
||||||
@subscriber.foo(nil)
|
|
||||||
assert_equal %w(debug), @logger.logged(:debug)
|
|
||||||
assert_equal %w(info), @logger.logged(:info)
|
|
||||||
assert_equal %w(warn), @logger.logged(:warn)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_set_color_for_messages
|
|
||||||
Rails::Subscriber.colorize_logging = true
|
|
||||||
@subscriber.bar(nil)
|
|
||||||
assert_equal "\e[31mcool\e[0m, \e[1m\e[34misn't it?\e[0m", @logger.logged(:info).last
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_does_not_set_color_if_colorize_logging_is_set_to_false
|
|
||||||
@subscriber.bar(nil)
|
|
||||||
assert_equal "cool, isn't it?", @logger.logged(:info).last
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_event_is_sent_to_the_registered_class
|
|
||||||
Rails::Subscriber.add :my_subscriber, @subscriber
|
|
||||||
instrument "my_subscriber.some_event"
|
|
||||||
wait
|
|
||||||
assert_equal %w(my_subscriber.some_event), @logger.logged(:info)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_event_is_an_active_support_notifications_event
|
|
||||||
Rails::Subscriber.add :my_subscriber, @subscriber
|
|
||||||
instrument "my_subscriber.some_event"
|
|
||||||
wait
|
|
||||||
assert_kind_of ActiveSupport::Notifications::Event, @subscriber.event
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_does_not_send_the_event_if_it_doesnt_match_the_class
|
|
||||||
Rails::Subscriber.add :my_subscriber, @subscriber
|
|
||||||
instrument "my_subscriber.unknown_event"
|
|
||||||
wait
|
|
||||||
# If we get here, it means that NoMethodError was raised.
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_does_not_send_the_event_if_logger_is_nil
|
|
||||||
Rails.logger = nil
|
|
||||||
@subscriber.expects(:some_event).never
|
|
||||||
Rails::Subscriber.add :my_subscriber, @subscriber
|
|
||||||
instrument "my_subscriber.some_event"
|
|
||||||
wait
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_flushes_loggers
|
|
||||||
Rails::Subscriber.add :my_subscriber, @subscriber
|
|
||||||
Rails::Subscriber.flush_all!
|
|
||||||
assert_equal 1, @logger.flush_count
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_flushes_the_same_logger_just_once
|
|
||||||
Rails::Subscriber.add :my_subscriber, @subscriber
|
|
||||||
Rails::Subscriber.add :another, @subscriber
|
|
||||||
Rails::Subscriber.flush_all!
|
|
||||||
wait
|
|
||||||
assert_equal 1, @logger.flush_count
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_logging_does_not_die_on_failures
|
|
||||||
Rails::Subscriber.add :my_subscriber, @subscriber
|
|
||||||
instrument "my_subscriber.puke"
|
|
||||||
instrument "my_subscriber.some_event"
|
|
||||||
wait
|
|
||||||
|
|
||||||
assert_equal 1, @logger.logged(:info).size
|
|
||||||
assert_equal 'my_subscriber.some_event', @logger.logged(:info).last
|
|
||||||
|
|
||||||
assert_equal 1, @logger.logged(:error).size
|
|
||||||
assert_equal 'Could not log "my_subscriber.puke" event. RuntimeError: puke', @logger.logged(:error).last
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in New Issue