diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index f932110df49..5072019d31b 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -176,6 +176,17 @@ def addLevelName(level, levelName): finally: _releaseLock() +def _checkLevel(level): + if isinstance(level, int): + rv = level + elif str(level) == level: + if level not in _levelNames: + raise ValueError("Unknown level: %r" % level) + rv = _levelNames[level] + else: + raise TypeError("Level not an integer or a valid string: %r" % level) + return rv + #--------------------------------------------------------------------------- # Thread-related stuff #--------------------------------------------------------------------------- @@ -593,7 +604,7 @@ class Handler(Filterer): and the filter list to empty. """ Filterer.__init__(self) - self.level = level + self.level = _checkLevel(level) self.formatter = None #get the module data lock, as we're updating a shared structure. _acquireLock() @@ -631,7 +642,7 @@ class Handler(Filterer): """ Set the logging level of this handler. """ - self.level = level + self.level = _checkLevel(level) def format(self, record): """ @@ -1009,7 +1020,7 @@ class Logger(Filterer): """ Filterer.__init__(self) self.name = name - self.level = level + self.level = _checkLevel(level) self.parent = None self.propagate = 1 self.handlers = [] @@ -1019,7 +1030,7 @@ class Logger(Filterer): """ Set the logging level of this logger. """ - self.level = level + self.level = _checkLevel(level) def debug(self, msg, *args, **kwargs): """ @@ -1396,10 +1407,6 @@ def basicConfig(**kwargs): root.addHandler(hdlr) level = kwargs.get("level") if level is not None: - if str(level) == level: # If a string was passed, do more checks - if level not in _levelNames: - raise ValueError("Unknown level: %r" % level) - level = _levelNames[level] root.setLevel(level) #--------------------------------------------------------------------------- diff --git a/Misc/NEWS b/Misc/NEWS index b2ce671a289..f4670e64669 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -90,8 +90,7 @@ Core and Builtins Library ------- -- Issue #6314: logging.basicConfig() performs extra checks on the "level" - argument. +- Issue #6314: logging: performs extra checks on the "level" argument. - Issue #6274: Fixed possible file descriptors leak in subprocess.py @@ -133,7 +132,7 @@ Library ------- - Issue #6438: Fixed distutils.cygwinccompiler.get_versions : the regular - expression string pattern was trying to match against a bytes returned by + expression string pattern was trying to match against a bytes returned by Popen. Tested under win32 to build the py-postgresql project. - Issue #6258: Support AMD64 in bdist_msi. @@ -892,22 +891,22 @@ Core and Builtins Library ------- -- Issue #6459: distutils.command.build_ext.get_export_symbols now uses the - "PyInit" prefix, rather than "init". +- Issue #6459: distutils.command.build_ext.get_export_symbols now uses the + "PyInit" prefix, rather than "init". -- Issue #6455: Fixed test_build_ext under win32. +- Issue #6455: Fixed test_build_ext under win32. -- Issue #6377: Enabled the compiler option, and deprecate its usage as an +- Issue #6377: Enabled the compiler option, and deprecate its usage as an attribute. - Issue #6413: Fixed the log level in distutils.dist for announce. - Issue #6403: Fixed package path usage in build_ext. -- Issue #6365: Distutils build_ext inplace mode was copying the compiled +- Issue #6365: Distutils build_ext inplace mode was copying the compiled extension in a subdirectory if the extension name had dots. -- Issue #6164: Added an AIX specific linker argument in Distutils +- Issue #6164: Added an AIX specific linker argument in Distutils unixcompiler. Original patch by Sridhar Ratnakumar. - Issue #6286: Now Distutils upload command is based on urllib2 instead of