# Copyright (c) 2022 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details. # frozen_string_literal: true module Contrast module Logger # Our decorator for the Ougai logger allowing for timing and with_level # methods. module Time # Log the message at the given level. # # @param level [String] the name of the method to use. Should be one of # trace, debug, info, warn, error # @param message [String] the message to log def with_level level, message send(level.to_sym, message) end # Log, at the debug level, the action with a message including the time # it took for the wrapped function to complete. # # @param msgs [Array] the arguments to pass to the logger. # msgs[0] will be modified to include the elapsed time. # @param block [Block, Proc] the block to execute def debug_with_time *msgs, &block log_with_time(:debug, *msgs, &block) end # Log, at the trace level, the action with a message including the time # it took for the wrapped function to complete. # # @param msgs [Array] the arguments to pass to the logger. # msgs[0] will be modified to include the elapsed time. # @param block [Block, Proc] the block to execute def trace_with_time *msgs, &block log_with_time(:trace, *msgs, &block) end private def log_with_time level, *msgs a = Contrast::Utils::Timer.now_ms ret = yield if block_given? z = Contrast::Utils::Timer.now_ms msgs[0] = "#{ msgs[0] }: pid=#{ Process.pid }, elapsed=#{ z - a }ms" send(level, *msgs) ret end end end end