diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index a3b3e391ec3..b48bee85bd0 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -1513,15 +1513,12 @@ def shutdown(handlerList=_handlerList): #errors might occur, for example, if files are locked #we just ignore them if raiseExceptions is not set try: - h.acquire() h.flush() h.close() except: if raiseExceptions: raise #else, swallow - finally: - h.release() #Let's try and shutdown automatically on application exit... try: diff --git a/Lib/logging/config.py b/Lib/logging/config.py index 2881e3fb34d..eb2c2484e21 100644 --- a/Lib/logging/config.py +++ b/Lib/logging/config.py @@ -232,14 +232,14 @@ def _install_loggers(cp, handlers, disable_existing_loggers): propagate = 1 logger = logging.getLogger(qn) if qn in existing: - i = existing.index(qn) + 1 # start with the entry after qn + i = existing.index(qn) prefixed = qn + "." pflen = len(prefixed) num_existing = len(existing) - while i < num_existing: - if existing[i][:pflen] == prefixed: - child_loggers.append(existing[i]) - i += 1 + i = i + 1 # look at the entry after qn + while (i < num_existing) and (existing[i][:pflen] == prefixed): + child_loggers.append(existing[i]) + i = i + 1 existing.remove(qn) if "level" in opts: level = cp.get(sectname, "level") diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index fbbef64cd32..27eeb27469d 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -558,38 +558,6 @@ class ConfigFileTest(BaseTest): datefmt= """ - # config1a moves the handler to the root. - config1a = """ - [loggers] - keys=root,parser - - [handlers] - keys=hand1 - - [formatters] - keys=form1 - - [logger_root] - level=WARNING - handlers=hand1 - - [logger_parser] - level=DEBUG - handlers= - propagate=1 - qualname=compiler.parser - - [handler_hand1] - class=StreamHandler - level=NOTSET - formatter=form1 - args=(sys.stdout,) - - [formatter_form1] - format=%(levelname)s ++ %(message)s - datefmt= - """ - # config2 has a subtle configuration error that should be reported config2 = config1.replace("sys.stdout", "sys.stbout") @@ -668,44 +636,6 @@ class ConfigFileTest(BaseTest): datefmt= """ - # config7 adds a compiler logger. - config7 = """ - [loggers] - keys=root,parser,compiler - - [handlers] - keys=hand1 - - [formatters] - keys=form1 - - [logger_root] - level=WARNING - handlers=hand1 - - [logger_compiler] - level=DEBUG - handlers= - propagate=1 - qualname=compiler - - [logger_parser] - level=DEBUG - handlers= - propagate=1 - qualname=compiler.parser - - [handler_hand1] - class=StreamHandler - level=NOTSET - formatter=form1 - args=(sys.stdout,) - - [formatter_form1] - format=%(levelname)s ++ %(message)s - datefmt= - """ - def apply_config(self, conf): try: fn = tempfile.mktemp(".ini") @@ -775,49 +705,6 @@ class ConfigFileTest(BaseTest): def test_config6_ok(self): self.test_config1_ok(config=self.config6) - def test_config7_ok(self): - with captured_stdout() as output: - self.apply_config(self.config1a) - logger = logging.getLogger("compiler.parser") - # See issue #11424. compiler-hyphenated sorts - # between compiler and compiler.xyz and this - # was preventing compiler.xyz from being included - # in the child loggers of compiler because of an - # overzealous loop termination condition. - hyphenated = logging.getLogger('compiler-hyphenated') - # All will output a message - logger.info(self.next_message()) - logger.error(self.next_message()) - hyphenated.critical(self.next_message()) - self.assert_log_lines([ - ('INFO', '1'), - ('ERROR', '2'), - ('CRITICAL', '3'), - ], stream=output) - # Original logger output is empty. - self.assert_log_lines([]) - with captured_stdout() as output: - self.apply_config(self.config7) - logger = logging.getLogger("compiler.parser") - self.assertFalse(logger.disabled) - # Both will output a message - logger.info(self.next_message()) - logger.error(self.next_message()) - logger = logging.getLogger("compiler.lexer") - # Both will output a message - logger.info(self.next_message()) - logger.error(self.next_message()) - # Will not appear - hyphenated.critical(self.next_message()) - self.assert_log_lines([ - ('INFO', '4'), - ('ERROR', '5'), - ('INFO', '6'), - ('ERROR', '7'), - ], stream=output) - # Original logger output is empty. - self.assert_log_lines([]) - class LogRecordStreamHandler(StreamRequestHandler): """Handler for a streaming logging request. It saves the log message in the