class DynportTools::LogTracer

Constants

FILTER_BACKTRACE
LOGGER_METHODS
REMOVE_COLOR

Public Class Methods

setup(logger) click to toggle source
# File lib/dynport_tools/log_tracer.rb, line 6
  def self.setup(logger)
    return if logger.respond_to?(:log_trace)
    logger.class.class_eval do
      LOGGER_METHODS.each do |meth|
        alias_method :"#{meth}_without_log_tracer", meth

        def register_tracer(re_or_messahge, &block)
          tracers[re_or_messahge] = block
        end

        def tracers
          @tracers ||= Hash.new
        end

        def log_trace(message)
          self.tracers.each do |re_or_string, block|
            filtered_backtrace = filter_backtrace(caller)
            if filtered_backtrace.any? && (re_or_string.is_a?(String) ? message.include?(re_or_string) : message.match(re_or_string))
              block.call(message.gsub(REMOVE_COLOR, "").strip, filtered_backtrace)
            end
          end
        end

        def filter_backtrace(trace)
          trace.reject { |t| t.match(FILTER_BACKTRACE) }
        end

        eval <<-EOM, nil, __FILE__, __LINE__ + 1
          def #{meth}(message = nil)
            log_trace(message)
            #{meth}_without_log_tracer(message)
          end
        EOM
      end
    end
  end

Public Instance Methods

filter_backtrace(trace) click to toggle source
# File lib/dynport_tools/log_tracer.rb, line 29
def filter_backtrace(trace)
  trace.reject { |t| t.match(FILTER_BACKTRACE) }
end
log_trace(message) click to toggle source
# File lib/dynport_tools/log_tracer.rb, line 20
def log_trace(message)
  self.tracers.each do |re_or_string, block|
    filtered_backtrace = filter_backtrace(caller)
    if filtered_backtrace.any? && (re_or_string.is_a?(String) ? message.include?(re_or_string) : message.match(re_or_string))
      block.call(message.gsub(REMOVE_COLOR, "").strip, filtered_backtrace)
    end
  end
end
register_tracer(re_or_messahge, &block) click to toggle source
# File lib/dynport_tools/log_tracer.rb, line 12
def register_tracer(re_or_messahge, &block)
  tracers[re_or_messahge] = block
end
tracers() click to toggle source
# File lib/dynport_tools/log_tracer.rb, line 16
def tracers
  @tracers ||= Hash.new
end