mirror of https://github.com/python/cpython.git
Issue #20242: Fixed basicConfig() format strings for the alternative formatting styles.
This commit is contained in:
parent
66c9350a89
commit
1fd1202072
|
@ -388,10 +388,12 @@ def usesTime(self):
|
|||
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):
|
||||
|
@ -456,7 +458,7 @@ def __init__(self, fmt=None, datefmt=None, style='%'):
|
|||
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
|
||||
|
||||
|
@ -1629,8 +1631,6 @@ def hasHandlers(self):
|
|||
# Configuration classes and functions
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
BASIC_FORMAT = "%(levelname)s:%(name)s:%(message)s"
|
||||
|
||||
def basicConfig(**kwargs):
|
||||
"""
|
||||
Do basic configuration for the logging system.
|
||||
|
@ -1704,9 +1704,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:
|
||||
|
|
|
@ -3337,6 +3337,22 @@ def test_no_kwargs(self):
|
|||
# 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):
|
||||
logging.basicConfig(filename='test.log')
|
||||
|
||||
|
|
|
@ -43,6 +43,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.
|
||||
|
|
Loading…
Reference in New Issue