Sha256: 91f0e1c777d8b314d24800e22454d17dd684cb3f5959940e68f42473c2880747

Contents?: true

Size: 1.43 KB

Versions: 8

Compression:

Stored size: 1.43 KB

Contents

module Services
  class Base
    module CallLogger
      def call(*args)
        log "START with args #{args}"
        log "CALLED BY #{caller || '(not found)'}"
        start = Time.now
        begin
          result = super
        rescue StandardError => e
          log_exception e
          raise e
        ensure
          log "END after #{(Time.now - start).round(2)} seconds"
          result
        end
      end

      private

      def log(message, severity = :info)
        @logger ||= Logger.new
        @logger.log [self.class, @id], message, severity
      end

      def log_exception(e, cause = false)
        log "#{'caused by: ' if cause}#{e.class}: #{e.message}"
        if e.respond_to?(:cause) && e.cause
          e.backtrace.take(5).each do |line|
            log "  #{line}"
          end
          log_exception(e.cause, true)
        else
          e.backtrace.each do |line|
            log "  #{line}"
          end
        end
      end

      def caller
        caller_location = caller_locations(1, 10).detect do |location|
          location.path !~ /\A#{Regexp.escape File.expand_path('../..', __FILE__)}/
        end
        if caller_location.nil?
          nil
        else
          caller_path = caller_location.path
          caller_path = caller_path.sub(%r(\A#{Regexp.escape Rails.root.to_s}/), '') if defined?(Rails)
          [caller_path, caller_location.lineno].join(':')
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
services-0.4.0 lib/services/modules/call_logger.rb
services-0.3.4 lib/services/modules/call_logger.rb
services-0.2.14 lib/services/modules/call_logger.rb
services-0.2.13 lib/services/modules/call_logger.rb
services-0.2.12 lib/services/modules/call_logger.rb
services-0.2.11 lib/services/modules/call_logger.rb
services-0.2.10 lib/services/modules/call_logger.rb
services-0.2.9 lib/services/modules/call_logger.rb