在Twisted中有什么方法可以更改应该记录的消息的日志记录级别吗?
我在项目中使用三个级别:
log.msg('agent nr.1 has free slots', logging.DEBUG) # debug message
log.msg('agent nr.1 has free slots') # info message
log.err('agent nr.1 has free slots') # error message
我以这种方式配置日志记录:
from twisted.python import log
from twisted.python.logfile import LogFile
logfile = LogFile("someFile.log", '/some/path/', rotateLength=1000, maxRotatedFiles=100)
application.setComponent(log.ILogObserver, log.FileLogObserver(logfile).emit)
但是我需要设置应该记录哪些消息(例如,只有信息和错误消息,没有调试)。怎么做?
答案 0 :(得分:11)
首先,您使用的API不存在。它未在模块中记录
等级log.msg
为documented here:所有非关键字参数都已传递
到log.msg
是消息的一部分,所以在这里你没有设置消息
等级,但在您的消息中添加一个整数,顺便提一下这个表单
气馁。
log.msg('agent nr.1 has free slots', logging.DEBUG) # debug message
其次,要回答你的问题,是的,你可以指示扭曲使用a 记录级别以确定应记录哪些消息,但这不是如何记录的 默认记录器工作。幸运的是,个性化扭曲有点自然 (如果你知道怎么做)。
你必须编写一个记录器观察者,例如你可以扩展
twisted.python.log.FileLogObserver
,用于处理logLevel:
import logging
from twisted.python import log
class LevelFileLogObserver(log.FileLogObserver):
def __init__(self, f, level=logging.INFO):
log.FileLogObserver.__init__(self, f)
self.logLevel = level
def emit(self, eventDict):
if eventDict['isError']:
level = logging.ERROR
elif 'level' in eventDict:
level = eventDict['level']
else:
level = logging.INFO
if level >= self.logLevel:
log.FileLogObserver.emit(self, eventDict)
然后你必须register it:
from twisted.python import logfile
f = logfile.LogFile("someFile.log", '/some/path/', rotateLength=1000,
maxRotatedFiles=100)
logger = LevelFileLogObserver(f, logging.DEBUG)
twisted.python.log.addObserver(logger.emit)
如果您使用twistd,则可以通过--logger
选项传递:
# mylogger.py
# import LevelFileLogObserver
from twisted.python import logfile
f = logfile.LogFile("someFile.log", '/some/path/', rotateLength=1000,
maxRotatedFiles=100)
flobserver = LevelFileLogObserver(f)
observer = flobserver.emit
# twistd invocation
twistd --logger=mylogger.observer
现在您可以使用您定义的新api:
log.msg('the level of this message is INFO')
log.msg('the level of this message is INFO', level=logging.INFO)
log.msg('the level of this message is DEBUG', level=logging.DEBUG)
log.msg('the level of this message is ERROR', level=logging.ERROR)
log.err('the level of this message is ERROR')
答案 1 :(得分:0)
我研究了mg.
和其他来源的答案,并实施了一个小型库tx-logging
。您将能够以常见的pythonic方式编写日志:
LOG = tx_logging.getLogger("some log name")
LOG.debug("some message")
访问主页获取信息:https://github.com/oblalex/tx-logging。希望这将有助于将来。