diff options
author | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2014-01-13 22:01:16 (GMT) |
---|---|---|
committer | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2014-01-13 22:01:16 (GMT) |
commit | 30e6a64e7675b16c5ba501d98de4702c468b134d (patch) | |
tree | 3c4d3b38e2782314f0459168fa1457a501b26836 | |
parent | 936dfae2e22b5b58d01416ddf47218c20bfde5e6 (diff) | |
parent | 1fd1202072e198a7b3cf1254787aff3e3bf1c99e (diff) | |
download | cpython-30e6a64e7675b16c5ba501d98de4702c468b134d.zip cpython-30e6a64e7675b16c5ba501d98de4702c468b134d.tar.gz cpython-30e6a64e7675b16c5ba501d98de4702c468b134d.tar.bz2 |
Closes #20242: Merged fix from 3.3.
-rw-r--r-- | Lib/logging/__init__.py | 17 | ||||
-rw-r--r-- | Lib/test/test_logging.py | 16 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 29 insertions, 7 deletions
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index 9b41b9d..bd9b994 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -390,10 +390,12 @@ class StringTemplateStyle(PercentStyle): def format(self, record): return self._tpl.substitute(**record.__dict__) +BASIC_FORMAT = "%(levelname)s:%(name)s:%(message)s" + _STYLES = { - '%': PercentStyle, - '{': StrFormatStyle, - '$': StringTemplateStyle + '%': (PercentStyle, BASIC_FORMAT), + '{': (StrFormatStyle, '{levelname}:{name}:{message}'), + '$': (StringTemplateStyle, '${levelname}:${name}:${message}'), } class Formatter(object): @@ -458,7 +460,7 @@ class Formatter(object): if style not in _STYLES: raise ValueError('Style must be one of: %s' % ','.join( _STYLES.keys())) - self._style = _STYLES[style](fmt) + self._style = _STYLES[style][0](fmt) self._fmt = self._style._fmt self.datefmt = datefmt @@ -1643,8 +1645,6 @@ Logger.manager = Manager(Logger.root) # Configuration classes and functions #--------------------------------------------------------------------------- -BASIC_FORMAT = "%(levelname)s:%(name)s:%(message)s" - def basicConfig(**kwargs): """ Do basic configuration for the logging system. @@ -1718,9 +1718,12 @@ def basicConfig(**kwargs): stream = kwargs.get("stream") h = StreamHandler(stream) handlers = [h] - fs = kwargs.get("format", BASIC_FORMAT) dfs = kwargs.get("datefmt", None) style = kwargs.get("style", '%') + if style not in _STYLES: + raise ValueError('Style must be one of: %s' % ','.join( + _STYLES.keys())) + fs = kwargs.get("format", _STYLES[style][1]) fmt = Formatter(fs, dfs, style) for h in handlers: if h.formatter is None: diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 3765f36..3fcc77a 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -3517,6 +3517,22 @@ class BasicConfigTest(unittest.TestCase): # level is not explicitly set self.assertEqual(logging.root.level, self.original_logging_level) + def test_strformatstyle(self): + with captured_stdout() as output: + logging.basicConfig(stream=sys.stdout, style="{") + logging.error("Log an error") + sys.stdout.seek(0) + self.assertEqual(output.getvalue().strip(), + "ERROR:root:Log an error") + + def test_stringtemplatestyle(self): + with captured_stdout() as output: + logging.basicConfig(stream=sys.stdout, style="$") + logging.error("Log an error") + sys.stdout.seek(0) + self.assertEqual(output.getvalue().strip(), + "ERROR:root:Log an error") + def test_filename(self): def cleanup(h1, h2, fn): @@ -25,6 +25,9 @@ Core and Builtins Library ------- +- Issue #20242: Fixed basicConfig() format strings for the alternative + formatting styles. Thanks to kespindler for the bug report and patch. + - Issues #20206 and #5803: Fix edge case in email.quoprimime.encode where it truncated lines ending in a character needing encoding but no newline by using a more efficient algorithm that doesn't have the bug. |