From 33deeea1a0c4519018ca0298db17d9e2ee4ed650 Mon Sep 17 00:00:00 2001 From: Colin Kelley Date: Fri, 6 Mar 2020 11:15:42 -0800 Subject: [PATCH 1/4] extract normalize_log_level method so we can call it elsewhere --- lib/contextual_logger.rb | 23 ++++++++++ lib/contextual_logger/logger_with_context.rb | 22 +-------- spec/lib/contextual_logger_spec.rb | 47 ++++++++++++++++++++ 3 files changed, 71 insertions(+), 21 deletions(-) diff --git a/lib/contextual_logger.rb b/lib/contextual_logger.rb index 31775c9..9262975 100644 --- a/lib/contextual_logger.rb +++ b/lib/contextual_logger.rb @@ -9,6 +9,29 @@ class << self def new(logger) logger.extend(LoggerMixin) end + + def normalize_log_level(log_level) + if (Logger::Severity::DEBUG..Logger::Severity::UNKNOWN).include?(log_level) || log_level.nil? + log_level + else + case log_level.to_s.downcase + when 'debug' + Logger::Severity::DEBUG + when 'info' + Logger::Severity::INFO + when 'warn' + Logger::Severity::WARN + when 'error' + Logger::Severity::ERROR + when 'fatal' + Logger::Severity::FATAL + when 'unknown' + Logger::Severity::UNKNOWN + else + raise ArgumentError, "invalid log level: #{log_level.inspect}" + end + end + end end module LoggerMixin diff --git a/lib/contextual_logger/logger_with_context.rb b/lib/contextual_logger/logger_with_context.rb index 467100e..e640ef3 100644 --- a/lib/contextual_logger/logger_with_context.rb +++ b/lib/contextual_logger/logger_with_context.rb @@ -22,27 +22,7 @@ def level end def level=(override_level) - @override_level = - if (Logger::Severity::DEBUG..Logger::Severity::UNKNOWN).include?(override_level) || override_level.nil? - override_level - else - case override_level.to_s.downcase - when 'debug' - Logger::Severity::DEBUG - when 'info' - Logger::Severity::INFO - when 'warn' - Logger::Severity::WARN - when 'error' - Logger::Severity::ERROR - when 'fatal' - Logger::Severity::FATAL - when 'unknown' - Logger::Severity::UNKNOWN - else - raise ArgumentError, "invalid log level: #{override_level.inspect}" - end - end + @override_level = ContextualLogger.normalize_log_level(override_level) end def write_entry_to_log(severity, timestamp, progname, message, context:) diff --git a/spec/lib/contextual_logger_spec.rb b/spec/lib/contextual_logger_spec.rb index f096a7e..122e45e 100644 --- a/spec/lib/contextual_logger_spec.rb +++ b/spec/lib/contextual_logger_spec.rb @@ -298,4 +298,51 @@ def expect_log_line_to_be_written(log_line) expect(log_stream.string).to match(/\{"message":"info message","severity":"INFO","timestamp":".*"\}/) end end + + LOG_LEVEL_STRINGS_TO_CONSTANTS = + { + "DEBUG" => Logger::Severity::DEBUG, + "INFO" => Logger::Severity::INFO, + "WARN" => Logger::Severity::WARN, + "ERROR" => Logger::Severity::ERROR, + "FATAL" => Logger::Severity::FATAL, + "UNKNOWN" => Logger::Severity::UNKNOWN + } + + describe 'module methods' do + describe "normalize_log_level" do + it "accepts Severity constants" do + LOG_LEVEL_STRINGS_TO_CONSTANTS.each do |_uppercase_string_level, constant_level| + expect(ContextualLogger.normalize_log_level(constant_level)).to eq(constant_level) + end + end + + it "accepts uppercase strings" do + LOG_LEVEL_STRINGS_TO_CONSTANTS.each do |uppercase_string_level, constant_level| + expect(ContextualLogger.normalize_log_level(uppercase_string_level)).to eq(constant_level) + end + end + + it "accepts uppercase symbols" do + LOG_LEVEL_STRINGS_TO_CONSTANTS.each do |uppercase_string_level, constant_level| + uppercase_symbol_level = uppercase_string_level.to_sym + expect(ContextualLogger.normalize_log_level(uppercase_symbol_level)).to eq(constant_level) + end + end + + it "accepts lowercase strings" do + LOG_LEVEL_STRINGS_TO_CONSTANTS.each do |uppercase_string_level, constant_level| + lowercase_string_level = uppercase_string_level.downcase + expect(ContextualLogger.normalize_log_level(lowercase_string_level)).to eq(constant_level) + end + end + + it "accepts lowercase symbols" do + LOG_LEVEL_STRINGS_TO_CONSTANTS.each do |uppercase_string_level, constant_level| + lowercase_symbol_level = uppercase_string_level.downcase.to_sym + expect(ContextualLogger.normalize_log_level(lowercase_symbol_level)).to eq(constant_level) + end + end + end + end end From aab3b569da49d8a62597fbb93191fec49997eae3 Mon Sep 17 00:00:00 2001 From: Colin Kelley Date: Fri, 6 Mar 2020 11:17:24 -0800 Subject: [PATCH 2/4] bump version to 0.5.0 --- Gemfile.lock | 2 +- contextual_logger.gemspec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index f06d00a..2215cb9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - contextual_logger (0.4.0) + contextual_logger (0.5.0) activesupport json diff --git a/contextual_logger.gemspec b/contextual_logger.gemspec index b06bed3..2f3093c 100644 --- a/contextual_logger.gemspec +++ b/contextual_logger.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |spec| spec.name = 'contextual_logger' - spec.version = '0.4.0' + spec.version = '0.5.0' spec.license = 'MIT' spec.date = '2018-10-12' spec.summary = 'Add context to your logger' From 0d5a2486a9096ed83ade49a5d19be8d637bf273f Mon Sep 17 00:00:00 2001 From: Colin Kelley Date: Fri, 6 Mar 2020 11:32:52 -0800 Subject: [PATCH 3/4] add tests for invalid values passed to normalize_log_level --- lib/contextual_logger.rb | 2 +- lib/contextual_logger/logger_with_context.rb | 2 +- spec/lib/contextual_logger_spec.rb | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/contextual_logger.rb b/lib/contextual_logger.rb index 9262975..4c580ec 100644 --- a/lib/contextual_logger.rb +++ b/lib/contextual_logger.rb @@ -11,7 +11,7 @@ def new(logger) end def normalize_log_level(log_level) - if (Logger::Severity::DEBUG..Logger::Severity::UNKNOWN).include?(log_level) || log_level.nil? + if log_level.is_a?(Integer) && (Logger::Severity::DEBUG..Logger::Severity::UNKNOWN).include?(log_level) log_level else case log_level.to_s.downcase diff --git a/lib/contextual_logger/logger_with_context.rb b/lib/contextual_logger/logger_with_context.rb index e640ef3..38623e0 100644 --- a/lib/contextual_logger/logger_with_context.rb +++ b/lib/contextual_logger/logger_with_context.rb @@ -22,7 +22,7 @@ def level end def level=(override_level) - @override_level = ContextualLogger.normalize_log_level(override_level) + @override_level = (ContextualLogger.normalize_log_level(override_level) if override_level) end def write_entry_to_log(severity, timestamp, progname, message, context:) diff --git a/spec/lib/contextual_logger_spec.rb b/spec/lib/contextual_logger_spec.rb index 122e45e..fd68efc 100644 --- a/spec/lib/contextual_logger_spec.rb +++ b/spec/lib/contextual_logger_spec.rb @@ -311,6 +311,12 @@ def expect_log_line_to_be_written(log_line) describe 'module methods' do describe "normalize_log_level" do + it "raises an exception on invalid values" do + [nil, "", "ABC", 3.5].each do |invalid_value| + expect { ContextualLogger.normalize_log_level(invalid_value) }.to raise_exception(ArgumentError, /invalid log level:/), invalid_value + end + end + it "accepts Severity constants" do LOG_LEVEL_STRINGS_TO_CONSTANTS.each do |_uppercase_string_level, constant_level| expect(ContextualLogger.normalize_log_level(constant_level)).to eq(constant_level) From 2fdf3c0ee672f7978291e707090b7a43e8287a4b Mon Sep 17 00:00:00 2001 From: Colin Kelley Date: Fri, 6 Mar 2020 11:36:01 -0800 Subject: [PATCH 4/4] freeze constant --- spec/lib/contextual_logger_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/lib/contextual_logger_spec.rb b/spec/lib/contextual_logger_spec.rb index fd68efc..d91f2e9 100644 --- a/spec/lib/contextual_logger_spec.rb +++ b/spec/lib/contextual_logger_spec.rb @@ -307,7 +307,7 @@ def expect_log_line_to_be_written(log_line) "ERROR" => Logger::Severity::ERROR, "FATAL" => Logger::Severity::FATAL, "UNKNOWN" => Logger::Severity::UNKNOWN - } + }.freeze describe 'module methods' do describe "normalize_log_level" do