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
-
BLACK =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 74
ANSI sequence colors
"\e[30m" -
BLUE =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 78"\e[34m" -
CYAN =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 80"\e[36m" -
GREEN =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 76"\e[32m" -
MAGENTA =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 79"\e[35m" -
MODES =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 66
ANSI sequence modes
{ clear: 0, bold: 1, italic: 3, underline: 4, } -
RED =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 75"\e[31m" -
WHITE =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 81"\e[37m" -
YELLOW =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 77"\e[33m"
Class Attribute Summary
- .colorize_logging (also: #colorize_logging) rw
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