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.
| Use Case | Command | Description |
|---|---|---|
| 📝 Define a custom log subscriber | class MyLogSubscriber < ActiveSupport::LogSubscriber; def my_event(event) ... end; end | Create a subscriber class and define methods for each notification namespace |
| 🔗 Attach subscriber to a namespace | MyLogSubscriber.attach_to :my_namespace | Register the subscriber to listen for notifications under the given namespace |
| ⚙️ Set a custom logger | MyLogSubscriber.logger = Logger.new(STDOUT) | Assign a logger instance (automatically set in Rails) |
| ❌ Handle exceptions in instrumented code | if event.payload[:exception] ... end | Check for exceptions and log error details |
| 🎨 Colorize log output | color(text, :RED) | Use the color helper to apply ANSI colors |
BLACK — ColorsBLUE — [not documented]BOLD — [not documented]CLEAR — Embed in a String to clear all previous ANSI sequences.CYAN — [not documented]GREEN — [not documented]MAGENTA — [not documented]RED — [not documented]WHITE — [not documented]YELLOW — [not documented]flush_all!log_subscribersloggercolorfinishloggerstartlogger (attr_writer)Generated by phpman v4.9.26-1-g511901d · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-07-27 16:41 @216.73.216.194
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Enhanced by LLM: deepseek-v4-flash / taotoken.net / www.chedong.com - original format