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 =
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 =
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