Skip to content

Commit

Permalink
* lib/logger.rb: support symbol and string log level setting
Browse files Browse the repository at this point in the history
[fix GH-1101]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52621 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
sonots committed Nov 17, 2015
1 parent 285877a commit 74690b8
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 1 deletion.
36 changes: 35 additions & 1 deletion lib/logger.rb
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,13 @@
#
# # DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN
#
# 3. Symbol or String (case insensitive)
#
# logger.level = :info
# logger.level = 'INFO'
#
# # :debug < :info < :warn < :error < :fatal < :unknown
#
# == Format
#
# Log messages are rendered in the output stream in a certain format by
Expand Down Expand Up @@ -234,7 +241,34 @@ module Severity
include Severity

# Logging severity threshold (e.g. <tt>Logger::INFO</tt>).
attr_accessor :level
attr_reader :level

# Set logging severity threshold.
#
# +severity+:: The Severity of the log message.
def level=(severity)
if severity.is_a?(Integer)
@level = severity
else
_severity = severity.to_s.downcase
case _severity
when 'debug'.freeze
@level = DEBUG
when 'info'.freeze
@level = INFO
when 'warn'.freeze
@level = WARN
when 'error'.freeze
@level = ERROR
when 'fatal'.freeze
@level = FATAL
when 'unknown'.freeze
@level = UNKNOWN
else
raise ArgumentError, "invalid log level: #{severity}"
end
end
end

# Program name to include in log messages.
attr_accessor :progname
Expand Down
44 changes: 44 additions & 0 deletions test/logger/test_logger.rb
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,50 @@ def test_level
assert(!@logger.fatal?)
end

def test_symbol_level
logger_symbol_levels = {
debug: DEBUG,
info: INFO,
warn: WARN,
error: ERROR,
fatal: FATAL,
unknown: UNKNOWN,
DEBUG: DEBUG,
INFO: INFO,
WARN: WARN,
ERROR: ERROR,
FATAL: FATAL,
UNKNOWN: UNKNOWN,
}
logger_symbol_levels.each do |symbol, level|
@logger.level = symbol
assert(@logger.level == level)
end
assert_raise(ArgumentError) { @logger.level = :something_wrong }
end

def test_string_level
logger_string_levels = {
'debug' => DEBUG,
'info' => INFO,
'warn' => WARN,
'error' => ERROR,
'fatal' => FATAL,
'unknown' => UNKNOWN,
'DEBUG' => DEBUG,
'INFO' => INFO,
'WARN' => WARN,
'ERROR' => ERROR,
'FATAL' => FATAL,
'UNKNOWN' => UNKNOWN,
}
logger_string_levels.each do |string, level|
@logger.level = string
assert(@logger.level == level)
end
assert_raise(ArgumentError) { @logger.level = 'something_wrong' }
end

def test_progname
assert_nil(@logger.progname)
@logger.progname = "name"
Expand Down

0 comments on commit 74690b8

Please sign in to comment.