扭曲记录不打印到屏幕

logging with twisted not printing to the screen

问题和这个有点关系。 twisted logging to screen(stdout) not working

我想使用 twisted logger 在屏幕上显示日志。它在将字符串传递给日志方法时起作用,但是当按照链接文档中所述传递 python 对象时它不起作用(下面代码最后一行的日志语句)。

import logging
from twisted.logger import Logger, LogLevel
import sys

from twisted.logger import globalLogPublisher
from twisted.logger import textFileLogObserver
from twisted.logger import FilteringLogObserver, LogLevelFilterPredicate, LogLevel

log = Logger()

level = LogLevel.debug
predicate = LogLevelFilterPredicate(defaultLogLevel=level)
observer = FilteringLogObserver(textFileLogObserver(sys.stdout), [predicate])
globalLogPublisher.addObserver(observer)

#---------> This works
log.info("Start logging with {l}", l=level)

#---------> This does not
log.debug(data=log)

根据消息来源https://github.com/twisted/twisted/blob/twisted-16.3.0/twisted/logger/_logger.py .debug.info 调用相同的 def emit(self, level, format=None, **kwargs)

如果是信息,它是 self.emit(LogLevel.info, format, **kwargs) 并且调试调用 self.emit(LogLevel.debug, format, **kwargs)

因此,如果您希望 log.debug 正常工作,您应该坚持格式并将其命名为:

log.debug('debug with {obj}', obj=log)