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 <mhartmay@linux.ibm.com>
pull/1341/head
Marc Hartmayer 1 month ago
parent dad28e8b4a
commit 24745183ed

@ -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)

Loading…
Cancel
Save