2012-12-06 37 views
4

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) 

但我需要设置哪些消息记录(例如,仅信息和错误信息,没有调试)。怎么做?

+2

我没有时间写完整答案,但未来的访问者应该知道这些答案已过时。请参阅:http://twistedmatrix.com/documents/current/core/howto/logger.html –

回答

10

首先,您使用的api不存在。它不是在模块 水平证明,但log.msgdocumented here:通过 到log.msg所有非关键字参数是消息所以这里的你是不是设置消息 水平,但添加到您的消息的整数部分,这种形式的方式 气馁。

log.msg('agent nr.1 has free slots', logging.DEBUG) # debug message 

其次,要回答你的问题,是的,你可以指示扭曲使用 日志级别来确定的消息应使用记录,但这不是 默认记录器是如何工作的。幸运的是,个性化扭曲是有点自然的 (如果你知道如何去做)。

你必须写一个记录仪观测,例如,你可以扩展 twisted.python.log.FileLogObserver,一个处理一个日志等级:

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') 
0

我从mg.和其他来源研究的答案并实现一个小小的图书馆tx-logging。您将能够在共同的Python的方式来写日志:

LOG = tx_logging.getLogger("some log name") 
LOG.debug("some message") 

访问主页信息:https://github.com/oblalex/tx-logging。希望这将有助于未来的人。