- 1.0.0
- 1.1.6
- 1.2.6
- 2.0.3
- 2.1.0
- 2.2.1
- 2.3.8
- 3.0.0 (0)
- 3.0.9 (-2)
- 3.1.0 (1)
- 3.2.1 (0)
- 3.2.8 (0)
- 3.2.13 (0)
- 4.0.2 (0)
- 4.1.8 (0)
- 4.2.1 (0)
- 4.2.7 (0)
- 4.2.9 (0)
- 5.0.0.1 (0)
- 5.1.7 (0)
- 5.2.3 (0)
- 6.0.0 (38)
- 6.1.3.1 (7)
- 6.1.7.7 (0)
- 7.0.0 (0)
- 7.1.3.2 (-11)
- 7.1.3.4 (0)
- What's this?
Active Support Log 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 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 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
+ActiveSupport::LogSubscriber+ also has some helpers to deal with logging. For example, ActiveSupport::LogSubscriber.flush_all! will ensure that all logs are flushed, and it is called in Rails::Rack::Logger after a request finishes.
Constants
LEVEL_CHECKS = { debug: -> (logger) { !logger.debug? }, info: -> (logger) { !logger.info? }, error: -> (logger) { !logger.error? }, }
WHITE = "\e[37m"
CYAN = "\e[36m"
MAGENTA = "\e[35m"
BLUE = "\e[34m"
YELLOW = "\e[33m"
GREEN = "\e[32m"
RED = "\e[31m"
BLACK = "\e[30m"
MODES = { clear: 0, bold: 1, italic: 3, underline: 4, }
BOLD = ActiveSupport::Deprecation::DeprecatedObjectProxy.new("\e[1m", "BOLD is deprecated! Use MODES[:bold] instead.", ActiveSupport.deprecator)
CLEAR = ActiveSupport::Deprecation::DeprecatedObjectProxy.new("\e[0m", "CLEAR is deprecated! Use MODES[:clear] instead.", ActiveSupport.deprecator)
Attributes
[W] | event_levels | |
[W] | logger |