lib/lumberjack/formatter/exception_formatter.rb
# frozen_string_literal: true module Lumberjack class Formatter # Format an exception including the backtrace. You can specify an object that # responds to `call` as a backtrace cleaner. The exception backtrace will be # passed to this object and the returned array is what will be logged. You can # use this to clean out superfluous lines. class ExceptionFormatter attr_accessor :backtrace_cleaner # @param [#call] backtrace_cleaner An object that responds to `call` and takes # an array of strings (the backtrace) and returns an array of strings (the def initialize(backtrace_cleaner = nil) self.backtrace_cleaner = backtrace_cleaner end def call(exception) message = +"#{exception.class.name}: #{exception.message}" trace = exception.backtrace if trace trace = clean_backtrace(trace) message << "#{Lumberjack::LINE_SEPARATOR} #{trace.join("#{Lumberjack::LINE_SEPARATOR} ")}" end message end private def clean_backtrace(trace) if trace && backtrace_cleaner backtrace_cleaner.call(trace) else trace end end end end end