gh-145650: Add logging.{Formatter,Filter}.__repr__ (GH-145652)

This commit is contained in:
Jack Danger
2026-03-26 05:41:14 -07:00
committed by GitHub
parent 3a2b81e919
commit e1d4823797
3 changed files with 37 additions and 0 deletions
+6
View File
@@ -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.
+28
View File
@@ -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.