mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
#Issue 11424: merged fix from 3.1.
This commit is contained in:
commit
e783553daa
2 changed files with 118 additions and 5 deletions
|
@ -611,6 +611,38 @@ 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")
|
||||
|
||||
|
@ -689,6 +721,44 @@ 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):
|
||||
file = io.StringIO(textwrap.dedent(conf))
|
||||
logging.config.fileConfig(file)
|
||||
|
@ -752,6 +822,49 @@ 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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue