2012-12-06 36 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。希望這將有助於未來的人。