From 24745183edd356279c51f0abf7f775d4c4145941 Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Thu, 23 Oct 2025 13:19:57 +0000 Subject: [PATCH] master: Fix LogForwarder in case an own LogRecordFactory is used Since Python 3.2 the log record factory can be changed by using `logging.setLogRecordFactory` [1]. Therefore use `logging.makeLogRecord` as recommended in the documentation: "LogRecord instances are created automatically by the Logger every time something is logged, and can be created manually via makeLogRecord() (for example, from a pickled event received over the wire)." [2] This fixes the test case `log_handler_test.LogRecordFactoryTest.test_logrecordfactory`. [1] https://docs.python.org/3/library/logging.html#logging.setLogRecordFactory [2] https://docs.python.org/3/library/logging.html#logrecord-objects Signed-off-by: Marc Hartmayer --- mitogen/master.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/mitogen/master.py b/mitogen/master.py index f5d40025..3b896504 100644 --- a/mitogen/master.py +++ b/mitogen/master.py @@ -370,15 +370,19 @@ class LogForwarder(object): if logger is None: self._cache[logger_name] = logger = logging.getLogger(logger_name) + levelno = int(level_s) # See logging.Handler.makeRecord() - record = logging.LogRecord( - name=logger.name, - level=int(level_s), - pathname='(unknown file)', - lineno=0, - msg=s, - args=(), - exc_info=None, + record = logging.makeLogRecord( + { + "name": logger.name, + "levelname": logging.getLevelName(levelno), + "levelno": levelno, + "pathname": "(unknown file)", + "lineno": 0, + "msg": s, + "args": (), + "exc_info": None, + } ) record.mitogen_message = s record.mitogen_context = self._router.context_by_id(msg.src_id)