ri > ActiveSupport::LogSubscriber

📛 NAME

ActiveSupport::LogSubscriber < Subscriber

ActiveSupport::LogSubscriber is an object set to consume ActiveSupport::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
    def sql(event)
      info "#{event.payload[:name]} (#{event.duration}) #{event.payload[:sql]}"
    end
  end
end

And it's finally registered as:

ActiveRecord::LogSubscriber.attach_to :active_record

Since we need to know all instance methods before attaching the log subscriber, the line above should be called after your ActiveRecord::LogSubscriber definition.

A logger also needs to be set with ActiveRecord::LogSubscriber.logger=. This 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 ActiveSupport::Notifications consumer, ActiveSupport::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

Log subscriber also has some helpers to deal with logging and automatically flushes all logs when the request finishes (via action_dispatch.callback notification) in a Rails environment.

🚀 Quick Reference

Use CaseCommandDescription
📝 Define a custom log subscriberclass MyLogSubscriber < ActiveSupport::LogSubscriber; def my_event(event) ... end; endCreate a subscriber class and define methods for each notification namespace
🔗 Attach subscriber to a namespaceMyLogSubscriber.attach_to :my_namespaceRegister the subscriber to listen for notifications under the given namespace
⚙️ Set a custom loggerMyLogSubscriber.logger = Logger.new(STDOUT)Assign a logger instance (automatically set in Rails)
❌ Handle exceptions in instrumented codeif event.payload[:exception] ... endCheck for exceptions and log error details
🎨 Colorize log outputcolor(text, :RED)Use the color helper to apply ANSI colors

📋 Constants

🔧 Class Methods

🛠️ Instance Methods

📦 Attributes

ActiveSupport::LogSubscriber
📛 NAME 🚀 Quick Reference 📋 Constants 🔧 Class Methods 🛠️ Instance Methods 📦 Attributes

Generated by phpman v4.9.26-1-g511901d · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-07-27 17:45 @216.73.216.199
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 Transitional!Valid CSS!
Enhanced by LLM: deepseek-v4-flash / taotoken.net / www.chedong.com - original format

^_top_^