Commit 1fd12020 authored by Vinay Sajip's avatar Vinay Sajip

Issue #20242: Fixed basicConfig() format strings for the alternative formatting styles.

parent 66c9350a
...@@ -388,10 +388,12 @@ class StringTemplateStyle(PercentStyle): ...@@ -388,10 +388,12 @@ class StringTemplateStyle(PercentStyle):
def format(self, record): def format(self, record):
return self._tpl.substitute(**record.__dict__) return self._tpl.substitute(**record.__dict__)
BASIC_FORMAT = "%(levelname)s:%(name)s:%(message)s"
_STYLES = { _STYLES = {
'%': PercentStyle, '%': (PercentStyle, BASIC_FORMAT),
'{': StrFormatStyle, '{': (StrFormatStyle, '{levelname}:{name}:{message}'),
'$': StringTemplateStyle '$': (StringTemplateStyle, '${levelname}:${name}:${message}'),
} }
class Formatter(object): class Formatter(object):
...@@ -456,7 +458,7 @@ class Formatter(object): ...@@ -456,7 +458,7 @@ class Formatter(object):
if style not in _STYLES: if style not in _STYLES:
raise ValueError('Style must be one of: %s' % ','.join( raise ValueError('Style must be one of: %s' % ','.join(
_STYLES.keys())) _STYLES.keys()))
self._style = _STYLES[style](fmt) self._style = _STYLES[style][0](fmt)
self._fmt = self._style._fmt self._fmt = self._style._fmt
self.datefmt = datefmt self.datefmt = datefmt
...@@ -1629,8 +1631,6 @@ Logger.manager = Manager(Logger.root) ...@@ -1629,8 +1631,6 @@ Logger.manager = Manager(Logger.root)
# Configuration classes and functions # Configuration classes and functions
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
BASIC_FORMAT = "%(levelname)s:%(name)s:%(message)s"
def basicConfig(**kwargs): def basicConfig(**kwargs):
""" """
Do basic configuration for the logging system. Do basic configuration for the logging system.
...@@ -1704,9 +1704,12 @@ def basicConfig(**kwargs): ...@@ -1704,9 +1704,12 @@ def basicConfig(**kwargs):
stream = kwargs.get("stream") stream = kwargs.get("stream")
h = StreamHandler(stream) h = StreamHandler(stream)
handlers = [h] handlers = [h]
fs = kwargs.get("format", BASIC_FORMAT)
dfs = kwargs.get("datefmt", None) dfs = kwargs.get("datefmt", None)
style = kwargs.get("style", '%') 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) fmt = Formatter(fs, dfs, style)
for h in handlers: for h in handlers:
if h.formatter is None: if h.formatter is None:
......
...@@ -3337,6 +3337,22 @@ class BasicConfigTest(unittest.TestCase): ...@@ -3337,6 +3337,22 @@ class BasicConfigTest(unittest.TestCase):
# level is not explicitly set # level is not explicitly set
self.assertEqual(logging.root.level, self.original_logging_level) 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 test_filename(self):
logging.basicConfig(filename='test.log') logging.basicConfig(filename='test.log')
......
...@@ -43,6 +43,9 @@ Core and Builtins ...@@ -43,6 +43,9 @@ Core and Builtins
Library 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 - 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 truncated lines ending in a character needing encoding but no newline by
using a more efficient algorithm that doesn't have the bug. using a more efficient algorithm that doesn't have the bug.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment