123456789_123456789_123456789_123456789_123456789_

Class: ActiveSupport::LogSubscriber

Relationships & Source Files
Namespace Children
Modules:
Extension / Inclusion / Inheritance Descendants
Subclasses:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Subscriber
Instance Chain:
self, Subscriber
Inherits: ActiveSupport::Subscriber
Defined in: activesupport/lib/active_support/log_subscriber.rb,
activesupport/lib/active_support/log_subscriber/test_helper.rb

Overview

LogSubscriber is an object set to consume Notifications with the sole purpose of logging them. The log subscriber dispatches notifications to a registered object based on its given namespace.

An example would be Active Record log subscriber responsible for logging queries:

module ActiveRecord
  class LogSubscriber < ActiveSupport::LogSubscriber
    attach_to :active_record

    def sql(event)
      info "#{event.payload[:name]} (#{event.duration}) #{event.payload[:sql]}"
    end
  end
end

ActiveRecord::LogSubscriber.logger must be set as well, but it is assigned automatically in a Rails environment.

After configured, whenever a "sql.active_record" notification is published, it will properly dispatch the event (ActiveSupport::Notifications::Event) to the sql method.

Being an Notifications consumer, LogSubscriber exposes a simple interface to check if instrumented code raises an exception. It is common to log a different message in case of an error, and this can be achieved by extending the previous example:

module ActiveRecord
  class LogSubscriber < ActiveSupport::LogSubscriber
    def sql(event)
      exception = event.payload[:exception]

      if exception
        exception_object = event.payload[:exception_object]

        error "[ERROR] #{event.payload[:name]}: #{exception.join(', ')} " \
              "(#{exception_object.backtrace.first})"
      else
        # standard logger code
      end
    end
  end
end

LogSubscriber also has some helpers to deal with logging. For example, .flush_all! will ensure that all logs are flushed, and it is called in ::Rails::Rack::Logger after a request finishes.

Constant Summary

Class Attribute Summary

Class Method Summary

Subscriber - Inherited

.attach_to

Attach the subscriber to a namespace.

.detach_from

Detach the subscriber from a namespace.

.method_added

Adds event subscribers for all new methods added to the class.

.new, .subscribers, .add_event_subscriber, .remove_event_subscriber

Instance Attribute Summary

Instance Method Summary

Subscriber - Inherited

Constructor Details

This class inherits a constructor from ActiveSupport::Subscriber

Class Attribute Details

.colorize_logging (rw) Also known as: #colorize_logging

[ GitHub ]

  
# File 'activesupport/lib/active_support/log_subscriber.rb', line 83

mattr_accessor :colorize_logging, default: true

Instance Attribute Details

#colorize_logging (rw)

[ GitHub ]

  
# File 'activesupport/lib/active_support/log_subscriber.rb', line 83

mattr_accessor :colorize_logging, default: true