Skip to content

Commit fcc136e

Browse files
Support extra=None in LogAdapter.log().
1 parent cc23236 commit fcc136e

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

Lib/logging/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1882,7 +1882,7 @@ def process(self, msg, kwargs):
18821882
Normally, you'll only need to override this one method in a
18831883
LoggerAdapter subclass for your specific needs.
18841884
"""
1885-
if self.merge_extra and "extra" in kwargs:
1885+
if self.merge_extra and kwargs.get("extra") is not None:
18861886
if self.extra is not None:
18871887
kwargs["extra"] = {**self.extra, **kwargs["extra"]}
18881888
else:

Lib/test/test_logging.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5997,6 +5997,18 @@ def test_extra_merged(self):
59975997
self.assertEqual(record.foo, '1')
59985998
self.assertEqual(record.bar, '2')
59995999

6000+
self.adapter.critical('no extra') # should not fail
6001+
self.assertEqual(len(self.recording.records), 2)
6002+
record = self.recording.records[-1]
6003+
self.assertEqual(record.foo, '1')
6004+
self.assertNotHasAttr(record, 'bar')
6005+
6006+
self.adapter.critical('none extra', extra=None) # should not fail
6007+
self.assertEqual(len(self.recording.records), 3)
6008+
record = self.recording.records[-1]
6009+
self.assertEqual(record.foo, '1')
6010+
self.assertNotHasAttr(record, 'bar')
6011+
60006012
def test_extra_merged_log_call_has_precedence(self):
60016013
self.adapter = logging.LoggerAdapter(logger=self.logger,
60026014
extra={'foo': '1'},
@@ -6012,14 +6024,21 @@ def test_extra_merged_without_extra(self):
60126024
self.adapter = logging.LoggerAdapter(logger=self.logger,
60136025
merge_extra=True)
60146026

6015-
self.adapter.critical('no extra')
6016-
self.assertEqual(len(self.recording.records), 1)
60176027
self.adapter.critical('foo should be here', extra={'foo': '1'})
6018-
self.assertEqual(len(self.recording.records), 2)
6028+
self.assertEqual(len(self.recording.records), 1)
60196029
record = self.recording.records[-1]
6020-
self.assertHasAttr(record, 'foo')
60216030
self.assertEqual(record.foo, '1')
60226031

6032+
self.adapter.critical('no extra') # should not fail
6033+
self.assertEqual(len(self.recording.records), 2)
6034+
record = self.recording.records[-1]
6035+
self.assertNotHasAttr(record, 'foo')
6036+
6037+
self.adapter.critical('none extra', extra=None) # should not fail
6038+
self.assertEqual(len(self.recording.records), 3)
6039+
record = self.recording.records[-1]
6040+
self.assertNotHasAttr(record, 'foo')
6041+
60236042

60246043
class PrefixAdapter(logging.LoggerAdapter):
60256044
prefix = 'Adapter'

0 commit comments

Comments
 (0)