lib/semantic_logger/levels.rb in semantic_logger-4.12.0 vs lib/semantic_logger/levels.rb in semantic_logger-4.13.0
- old
+ new
@@ -1,36 +1,32 @@
+require "logger"
+
module SemanticLogger
module Levels
# Logging levels in order of most detailed to most severe
LEVELS = %i[trace debug info warn error fatal].freeze
+ # Map the built-in `Logger` levels to SemanticLogger levels.
+ MAPPED_LEVELS =
+ ::Logger::Severity.constants.each_with_object([]) do |constant, levels|
+ logger_value = ::Logger::Severity.const_get(constant)
+ levels[logger_value] = LEVELS.find_index(constant.downcase.to_sym) || LEVELS.find_index(:error)
+ end.freeze
+
# Internal method to return the log level as an internal index
# Also supports mapping the ::Logger levels to SemanticLogger levels
def self.index(level)
return if level.nil?
- index =
- if level.is_a?(Symbol)
- LEVELS.index(level)
- elsif level.is_a?(String)
- level = level.downcase.to_sym
- LEVELS.index(level)
- elsif level.is_a?(Integer) && defined?(::Logger::Severity)
- # Mapping of Rails and Ruby Logger levels to SemanticLogger levels
- @map_levels ||=
- begin
- levels = []
- ::Logger::Severity.constants.each do |constant|
- levels[::Logger::Severity.const_get(constant)] =
- LEVELS.find_index(constant.downcase.to_sym) || LEVELS.find_index(:error)
- end
- levels
- end
- @map_levels[level]
- end
- raise "Invalid level:#{level.inspect} being requested. Must be one of #{LEVELS.inspect}" unless index
-
- index
+ case level
+ when Symbol
+ LEVELS.index(level)
+ when String
+ LEVELS.index(level.downcase.to_sym)
+ when Integer
+ MAPPED_LEVELS[level]
+ end ||
+ raise(ArgumentError, "Invalid level:#{level.inspect} being requested. Must be one of #{LEVELS.inspect}")
end
# Returns the symbolic level for the supplied level index
def self.level(level_index)
LEVELS[level_index]