mirror of
https://github.com/python/cpython.git
synced 2026-05-06 12:49:07 -04:00
gh-145650: Add logging.{Formatter,Filter}.__repr__ (GH-145652)
This commit is contained in:
@@ -622,6 +622,9 @@ class Formatter(object):
|
||||
self._fmt = self._style._fmt
|
||||
self.datefmt = datefmt
|
||||
|
||||
def __repr__(self):
|
||||
return '<%s (%s)>' % (self.__class__.__name__, self._fmt)
|
||||
|
||||
default_time_format = '%Y-%m-%d %H:%M:%S'
|
||||
default_msec_format = '%s,%03d'
|
||||
|
||||
@@ -794,6 +797,9 @@ class Filter(object):
|
||||
self.name = name
|
||||
self.nlen = len(name)
|
||||
|
||||
def __repr__(self):
|
||||
return '<%s (%s)>' % (self.__class__.__name__, self.name)
|
||||
|
||||
def filter(self, record):
|
||||
"""
|
||||
Determine if the specified record is to be logged.
|
||||
|
||||
@@ -404,6 +404,20 @@ class BasicFilterTest(BaseTest):
|
||||
r = logging.makeLogRecord({'name': 'spam.eggs'})
|
||||
self.assertTrue(f.filter(r))
|
||||
|
||||
def test_filter_repr(self):
|
||||
f = logging.Filter('myapp')
|
||||
self.assertEqual(repr(f), '<Filter (myapp)>')
|
||||
|
||||
def test_filter_repr_empty(self):
|
||||
f = logging.Filter()
|
||||
self.assertEqual(repr(f), '<Filter ()>')
|
||||
|
||||
def test_filter_repr_subclass(self):
|
||||
class MyFilter(logging.Filter):
|
||||
pass
|
||||
f = MyFilter('myapp')
|
||||
self.assertEqual(repr(f), '<MyFilter (myapp)>')
|
||||
|
||||
#
|
||||
# First, we define our levels. There can be as many as you want - the only
|
||||
# limitations are that they should be integers, the lowest should be > 0 and
|
||||
@@ -4914,6 +4928,20 @@ class FormatterTest(unittest.TestCase, AssertErrorMessage):
|
||||
# After PR gh-102412, precision (places) increases from 3 to 7
|
||||
self.assertAlmostEqual(relativeCreated, offset_ns / 1e6, places=7)
|
||||
|
||||
def test_formatter_repr(self):
|
||||
f = logging.Formatter('%(message)s')
|
||||
self.assertEqual(repr(f), '<Formatter (%(message)s)>')
|
||||
|
||||
def test_formatter_repr_default(self):
|
||||
f = logging.Formatter()
|
||||
self.assertEqual(repr(f), '<Formatter (%(message)s)>')
|
||||
|
||||
def test_formatter_repr_subclass(self):
|
||||
class MyFormatter(logging.Formatter):
|
||||
pass
|
||||
f = MyFormatter('%(message)s')
|
||||
self.assertEqual(repr(f), '<MyFormatter (%(message)s)>')
|
||||
|
||||
|
||||
class TestBufferingFormatter(logging.BufferingFormatter):
|
||||
def formatHeader(self, records):
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
Add :meth:`~object.__repr__` support to :class:`logging.Formatter` and
|
||||
:class:`logging.Filter`, showing the format string and filter name
|
||||
respectively.
|
||||
Reference in New Issue
Block a user