From f2a487f1cca12f8d2a50f1a3efe9dfb95ca6efc4 Mon Sep 17 00:00:00 2001 From: "vinay.sajip" Date: Wed, 3 Sep 2008 09:20:05 +0000 Subject: [PATCH] Issue #3726: Allowed spaces in separators in logging configuration files. git-svn-id: http://svn.python.org/projects/python/trunk@66180 6015fed2-1504-0410-9fe1-9d1591cc4771 --- Lib/logging/config.py | 16 +++++++++++----- Lib/test/test_logging.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ Misc/NEWS | 2 ++ 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/Lib/logging/config.py b/Lib/logging/config.py index 7c2f6ce29f..3017ae981c 100644 --- a/Lib/logging/config.py +++ b/Lib/logging/config.py @@ -22,7 +22,7 @@ by Apache's log4j system. Should work under Python versions >= 1.5.2, except that source line information is not available unless 'sys._getframe()' is. -Copyright (C) 2001-2007 Vinay Sajip. All Rights Reserved. +Copyright (C) 2001-2008 Vinay Sajip. All Rights Reserved. To use, simply 'import logging' and log away! """ @@ -101,6 +101,8 @@ def _resolve(name): found = getattr(found, n) return found +def _strip_spaces(alist): + return map(lambda x: string.strip(x), alist) def _create_formatters(cp): """Create and return formatters""" @@ -108,9 +110,10 @@ def _create_formatters(cp): if not len(flist): return {} flist = string.split(flist, ",") + flist = _strip_spaces(flist) formatters = {} for form in flist: - sectname = "formatter_%s" % string.strip(form) + sectname = "formatter_%s" % form opts = cp.options(sectname) if "format" in opts: fs = cp.get(sectname, "format", 1) @@ -136,10 +139,11 @@ def _install_handlers(cp, formatters): if not len(hlist): return {} hlist = string.split(hlist, ",") + hlist = _strip_spaces(hlist) handlers = {} fixups = [] #for inter-handler references for hand in hlist: - sectname = "handler_%s" % string.strip(hand) + sectname = "handler_%s" % hand klass = cp.get(sectname, "class") opts = cp.options(sectname) if "formatter" in opts: @@ -192,8 +196,9 @@ def _install_loggers(cp, handlers, disable_existing_loggers): hlist = cp.get(sectname, "handlers") if len(hlist): hlist = string.split(hlist, ",") + hlist = _strip_spaces(hlist) for hand in hlist: - log.addHandler(handlers[string.strip(hand)]) + log.addHandler(handlers[hand]) #and now the others... #we don't want to lose the existing loggers, @@ -243,8 +248,9 @@ def _install_loggers(cp, handlers, disable_existing_loggers): hlist = cp.get(sectname, "handlers") if len(hlist): hlist = string.split(hlist, ",") + hlist = _strip_spaces(hlist) for hand in hlist: - logger.addHandler(handlers[string.strip(hand)]) + logger.addHandler(handlers[hand]) #Disable any old loggers. There's no point deleting #them as other threads may continue to hold references diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 85b0994987..6ed8ca2a43 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -587,6 +587,48 @@ class ConfigFileTest(BaseTest): # config5 specifies a custom handler class to be loaded config5 = config1.replace('class=StreamHandler', 'class=logging.StreamHandler') + # config6 uses ', ' delimiters in the handlers and formatters sections + config6 = """ + [loggers] + keys=root,parser + + [handlers] + keys=hand1, hand2 + + [formatters] + keys=form1, form2 + + [logger_root] + level=WARNING + handlers= + + [logger_parser] + level=DEBUG + handlers=hand1 + propagate=1 + qualname=compiler.parser + + [handler_hand1] + class=StreamHandler + level=NOTSET + formatter=form1 + args=(sys.stdout,) + + [handler_hand2] + class=FileHandler + level=NOTSET + formatter=form1 + args=('test.blah', 'a') + + [formatter_form1] + format=%(levelname)s ++ %(message)s + datefmt= + + [formatter_form2] + format=%(message)s + datefmt= + """ + def apply_config(self, conf): try: fn = tempfile.mktemp(".ini") @@ -653,6 +695,9 @@ class ConfigFileTest(BaseTest): def test_config5_ok(self): self.test_config1_ok(config=self.config5) + def test_config6_ok(self): + self.test_config1_ok(config=self.config6) + class LogRecordStreamHandler(StreamRequestHandler): """Handler for a streaming logging request. It saves the log message in the diff --git a/Misc/NEWS b/Misc/NEWS index ff3b1b8cb6..df529b85b9 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -56,6 +56,8 @@ C-API Library ------- +- Issue #3726: Allowed spaces in separators in logging configuration files. + - Issue #3719: platform.architecture() fails if there are spaces in the path to the Python binary. -- 2.11.4.GIT