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
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 (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
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.
Constant Summary
-
BLACK =
Colors
"\e[30m"
-
BLUE =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 75"\e[34m"
-
BOLD =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 68"\e[1m"
-
CLEAR =
Embed in a
::String
to clear all previous ANSI sequences."\e[0m"
-
CYAN =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 77"\e[36m"
-
GREEN =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 73"\e[32m"
-
MAGENTA =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 76"\e[35m"
-
RED =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 72"\e[31m"
-
WHITE =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 78"\e[37m"
-
YELLOW =
# File 'activesupport/lib/active_support/log_subscriber.rb', line 74"\e[33m"
Class Attribute Summary
- .colorize_logging (also: #colorize_logging) rw
- .logger rw
- .logger=(value) rw
Class Method Summary
-
.flush_all!
Flush all log_subscribers’ logger.
- .log_subscribers
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
- #finish(name, id, payload)
- #logger
- #start(name, id, payload)
-
#color(text, color, bold = false)
private
Set color by using a symbol or one of the defined constants.
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 80
mattr_accessor :colorize_logging, default: true
.logger (rw)
[ GitHub ].logger=(value) (rw)
[ GitHub ]# File 'activesupport/lib/active_support/log_subscriber.rb', line 89
attr_writer :logger
Class Method Details
.flush_all!
Flush all log_subscribers’ logger.
.log_subscribers
[ GitHub ]# File 'activesupport/lib/active_support/log_subscriber.rb', line 91
def log_subscribers subscribers end
Instance Attribute Details
#colorize_logging (rw)
[ GitHub ]# File 'activesupport/lib/active_support/log_subscriber.rb', line 80
mattr_accessor :colorize_logging, default: true
Instance Method Details
#color(text, color, bold = false) (private)
# File 'activesupport/lib/active_support/log_subscriber.rb', line 135
def color(text, color, bold = false) # :doc: return text unless colorize_logging color = self.class.const_get(color.upcase) if color.is_a?(Symbol) bold = bold ? BOLD : "" "#{bold}#{color}#{text}#{CLEAR}" end
#finish(name, id, payload)
[ GitHub ]#logger
[ GitHub ]# File 'activesupport/lib/active_support/log_subscriber.rb', line 106
def logger LogSubscriber.logger end
#start(name, id, payload)
[ GitHub ]# File 'activesupport/lib/active_support/log_subscriber.rb', line 110
def start(name, id, payload) super if logger end