首先你需要写一个log观察者类,然后给这观察者一个级别来过滤你想要的log 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)
'''then you have to 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)
If you use twistd you can pass it through --logger option:
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 Now you can use the new api you defined:
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.msg('the level of this message is ERROR', level=logging.WARNING) log.msg('the level of this message is ERROR', level=logging.CRITICAL) log.err('the level of this message is ERROR')
级别共有五个,优先级关系是 '''level: DEBUG < INFO < WARNING < ERROR < CRITICAL''',如果级别为CRITICAL 那么小于它的级别的错误都不会打印出来
来源:oschina
链接:https://my.oschina.net/u/1032854/blog/194755