module NdrError::Logging
Module to contain helpers for logging
Constants
- ANCILLARY_ATTRS_WHITELIST
Which attributes can be populated when manually logging an exception:
Public Instance Methods
log(exception, ancillary_data, request_object)
click to toggle source
Log the given `exception`.
# File lib/ndr_error/logging.rb, line 8 def log(exception, ancillary_data, request_object) # Capture details about a parent exception, if possible: parent_print, = exception.cause && log(exception.cause, ancillary_data, request_object) log = initialize_log(ancillary_data) log.register_exception(exception) log.register_request(request_object) log.register_parent(parent_print) print = Fingerprint.find_or_create_by_id(log.md5_digest) print.causal_error_fingerprint = parent_print log = print.store_log(log) NdrError.run_after_log_callbacks(exception, print, log) [print, log] end
monitor(ancillary_data: {}, request: nil, swallow: false) { || ... }
click to toggle source
# File lib/ndr_error/logging.rb, line 26 def monitor(ancillary_data: {}, request: nil, swallow: false) yield rescue Exception => exception # rubocop:disable Lint/RescueException data = log(exception, ancillary_data, request) swallow ? data : raise(exception) end
Private Instance Methods
initialize_log(ancillary_data)
click to toggle source
Manual attribute whitelisting:
# File lib/ndr_error/logging.rb, line 36 def initialize_log(ancillary_data) Log.new.tap do |log| ancillary_data.symbolize_keys.each do |key, value| raise "Mass-assigning #{key} is forbidden!" unless ANCILLARY_ATTRS_WHITELIST.include?(key) if ActiveRecord::Base.respond_to?(:protected_attributes) log.assign_attributes({ key => value }, without_protection: true) else log.assign_attributes(key => value) end end end end