lib/sapience/base.rb in sapience-0.1.1 vs lib/sapience/base.rb in sapience-0.1.2

- old
+ new

@@ -1,6 +1,7 @@ module Sapience + # rubocop:disable ClassLength class Base # Class name to be logged attr_accessor :name, :filter # Set the logging level for this logger @@ -174,11 +175,11 @@ protected # Write log data to underlying data storage def log(_log_) - raise NotImplementedError.new('Logging Appender must implement #log(log)') + fail NotImplementedError, "Logging Appender must implement #log(log)" end private # Initializer for Abstract Class Sapience::Base @@ -196,14 +197,15 @@ # filter [Regexp|Proc] # RegExp: Only include log messages where the class name matches the supplied # regular expression. All other messages will be ignored # Proc: Only include log messages where the supplied Proc returns true # The Proc must return true or false - def initialize(klass, level = nil, filter = nil) # rubocop:disable AbcSize, PerceivedComplexity, CyclomaticComplexity + # rubocop:disable AbcSize, PerceivedComplexity, CyclomaticComplexity, LineLength + def initialize(klass, level = nil, filter = nil) # Support filtering all messages to this logger using a Regular Expression # or Proc - raise ':filter must be a Regexp or Proc' unless filter.nil? || filter.is_a?(Regexp) || filter.is_a?(Proc) + fail ArgumentError, ":filter must be a Regexp or Proc" unless filter.nil? || filter.is_a?(Regexp) || filter.is_a?(Proc) @filter = filter.is_a?(Regexp) ? filter.freeze : filter @name = klass.is_a?(String) ? klass : klass.name if level.nil? # Allow the global default level to determine this loggers log level @@ -211,10 +213,11 @@ @level = nil else self.level = level end end + # rubocop:enable AbcSize, PerceivedComplexity, CyclomaticComplexity, LineLength # Return the level index for fast comparisons # Returns the global default level index if the level has not been explicitly # set for this instance def level_index @@ -224,11 +227,11 @@ # Whether to log the supplied message based on the current filter if any def include_message?(log) return true if @filter.nil? if @filter.is_a?(Regexp) - (@filter =~ log.name) != nil + !(@filter =~ log.name).nil? elsif @filter.is_a?(Proc) @filter.call(log) == true end end @@ -237,11 +240,12 @@ # Ensure minimum log level is met, and check filter (level_index <= (log.level_index || 0)) && include_message?(log) end # Log message at the specified level - def log_internal(level, index, message = nil, payload = nil, exception = nil) # rubocop:disable AbcSize, PerceivedComplexity, CyclomaticComplexity + # rubocop:disable AbcSize, PerceivedComplexity, CyclomaticComplexity, LineLength + def log_internal(level, index, message = nil, payload = nil, exception = nil) # Exception being logged? if exception.nil? && payload.nil? && message.respond_to?(:backtrace) && message.respond_to?(:message) exception = message message = nil elsif exception.nil? && payload && payload.respond_to?(:backtrace) && payload.respond_to?(:message) @@ -279,21 +283,22 @@ min_duration = payload.delete(:min_duration) || 0.0 log.exception = payload.delete(:exception) log.message = payload.delete(:message) log.metric = payload.delete(:metric) log.metric_amount = payload.delete(:metric_amount) || 1 - if duration = payload.delete(:duration) + if (duration = payload.delete(:duration)) return false if duration <= min_duration log.duration = duration end log.payload = payload if payload.size > 0 end self.log(log) if include_message?(log) end + # rubocop:enable AbcSize, PerceivedComplexity, CyclomaticComplexity, LineLength - SELF_PATTERN = File.join('lib', 'sapience') + SELF_PATTERN = File.join("lib", "sapience") # Extract the callers backtrace leaving out Sapience def extract_backtrace stack = caller while (first = stack.first) && first.include?(SELF_PATTERN) @@ -301,17 +306,18 @@ end stack end # Measure the supplied block and log the message - def measure_internal(level, index, message, params) # rubocop:disable AbcSize, PerceivedComplexity, CyclomaticComplexity + # rubocop:disable AbcSize, PerceivedComplexity, CyclomaticComplexity, LineLength + def measure_internal(level, index, message, params) start = Time.now exception = nil begin if block_given? result = - if silence_level = params[:silence] + if (silence_level = params[:silence]) # In case someone accidentally sets `silence: true` instead of `silence: :error` silence_level = :error if silence_level == true silence(silence_level) { yield(params) } else yield(params) @@ -331,11 +337,11 @@ metric = params[:metric] duration = if block_given? 1000.0 * (end_time - start) else - params[:duration] || fail('Mandatory block missing when :duration option is not supplied') + params[:duration] || fail("Mandatory block missing when :duration option is not supplied") end # Add scoped payload if self.payload payload = payload.nil? ? self.payload : self.payload.merge(payload) @@ -362,20 +368,22 @@ else # Log the message with its duration but leave out the exception that was raised logged_exception = nil backtrace = exception.backtrace end - log = Log.new(level, Thread.current.name, name, message, payload, end_time, duration, tags, index, logged_exception, metric, backtrace) + log = Log.new(level, Thread.current.name, name, message, payload, end_time, duration, tags, index, logged_exception, metric, backtrace) # rubocop:disable LineLength self.log(log) if include_message?(log) - raise exception + fail exception elsif duration >= min_duration # Only log if the block took longer than 'min_duration' to complete # Add caller stack trace backtrace = extract_backtrace if index >= Sapience.config.backtrace_level_index - log = Log.new(level, Thread.current.name, name, message, payload, end_time, duration, tags, index, nil, metric, backtrace) + log = Log.new(level, Thread.current.name, name, message, payload, end_time, duration, tags, index, nil, metric, backtrace) # rubocop:disable LineLength self.log(log) if include_message?(log) end end end + # rubocop:enable AbcSize, PerceivedComplexity, CyclomaticComplexity, LineLength end + # rubocop:enable ClassLength end