Skip to content

Commit bdf6ee7

Browse files
committed
gh-145650: Add __repr__ to logging.Formatter and logging.Filter
1 parent 5a15a52 commit bdf6ee7

2 files changed

Lines changed: 35 additions & 0 deletions

File tree

Lib/logging/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,9 @@ def __init__(self, fmt=None, datefmt=None, style='%', validate=True, *,
622622
self._fmt = self._style._fmt
623623
self.datefmt = datefmt
624624

625+
def __repr__(self):
626+
return '<%s (%s)>' % (self.__class__.__name__, self._fmt)
627+
625628
default_time_format = '%Y-%m-%d %H:%M:%S'
626629
default_msec_format = '%s,%03d'
627630

@@ -809,6 +812,9 @@ def filter(self, record):
809812
return False
810813
return (record.name[self.nlen] == ".")
811814

815+
def __repr__(self):
816+
return '<%s (%s)>' % (self.__class__.__name__, self.name)
817+
812818
class Filterer(object):
813819
"""
814820
A base class for loggers and handlers which allows them to share

Lib/test/test_logging.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,20 @@ def test_empty_filter(self):
404404
r = logging.makeLogRecord({'name': 'spam.eggs'})
405405
self.assertTrue(f.filter(r))
406406

407+
def test_filter_repr(self):
408+
f = logging.Filter('myapp')
409+
self.assertEqual(repr(f), '<Filter (myapp)>')
410+
411+
def test_filter_repr_empty(self):
412+
f = logging.Filter()
413+
self.assertEqual(repr(f), '<Filter ()>')
414+
415+
def test_filter_repr_subclass(self):
416+
class MyFilter(logging.Filter):
417+
pass
418+
f = MyFilter('myapp')
419+
self.assertEqual(repr(f), '<MyFilter (myapp)>')
420+
407421
#
408422
# First, we define our levels. There can be as many as you want - the only
409423
# limitations are that they should be integers, the lowest should be > 0 and
@@ -4915,6 +4929,21 @@ def test_relativeCreated_has_higher_precision(self):
49154929
self.assertAlmostEqual(relativeCreated, offset_ns / 1e6, places=7)
49164930

49174931

4932+
def test_formatter_repr(self):
4933+
f = logging.Formatter('%(message)s')
4934+
self.assertEqual(repr(f), '<Formatter (%(message)s)>')
4935+
4936+
def test_formatter_repr_default(self):
4937+
f = logging.Formatter()
4938+
self.assertEqual(repr(f), '<Formatter (%(message)s)>')
4939+
4940+
def test_formatter_repr_subclass(self):
4941+
class MyFormatter(logging.Formatter):
4942+
pass
4943+
f = MyFormatter('%(message)s')
4944+
self.assertEqual(repr(f), '<MyFormatter (%(message)s)>')
4945+
4946+
49184947
class TestBufferingFormatter(logging.BufferingFormatter):
49194948
def formatHeader(self, records):
49204949
return '[(%d)' % len(records)

0 commit comments

Comments
 (0)