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: if logger is None:
self._cache[logger_name] = logger = logging.getLogger(logger_name) self._cache[logger_name] = logger = logging.getLogger(logger_name)
levelno = int(level_s)
# See logging.Handler.makeRecord() # See logging.Handler.makeRecord()
record = logging.LogRecord( record = logging.makeLogRecord(
name=logger.name, {
level=int(level_s), "name": logger.name,
pathname='(unknown file)', "levelname": logging.getLevelName(levelno),
lineno=0, "levelno": levelno,
msg=s, "pathname": "(unknown file)",
args=(), "lineno": 0,
exc_info=None, "msg": s,
"args": (),
"exc_info": None,
}
) )
record.mitogen_message = s record.mitogen_message = s
record.mitogen_context = self._router.context_by_id(msg.src_id) record.mitogen_context = self._router.context_by_id(msg.src_id)

Loading…
Cancel
Save