4

Twistedに、ログに記録する必要のあるメッセージのログレベルを変更する方法はありますか?

プロジェクトで3つのレベルを使用しています。

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)

ただし、ログに記録するメッセージを設定する必要があります(たとえば、情報メッセージとエラーメッセージのみ、デバッグなし)。どうやってするの?

4

2 に答える 2

11

まず、使用している API が存在しません。モジュールレベルでlog.msgは文書化されていませんが、ここに文書化されています: に渡されるすべての非キーワードパラメータlog.msgはメッセージの一部であるため、ここではメッセージレベルを設定していませんが、メッセージに整数を追加しています。

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

次に、あなたの質問に答えるために、はい、どのメッセージをログに記録するかを決定するためにログ レベルを使用するように twisted に指示できますが、これはデフォルトのロガーの動作ではありません。幸いなことに、ツイストをパーソナライズすることはある程度自然なことです (やり方を知っていれば)。

twisted.python.log.FileLogObserverlogLevel を処理するロガー オブザーバーを作成する必要があります。たとえば、拡張できます 。

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)

次に、それを登録する必要があります:

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')
于 2012-12-10T15:13:39.407 に答える
0

mg.および他のソースからの回答を調査し、小さなライブラリを実装しましたtx-logging。一般的な pythonic の方法でログを書き込むことができます。

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

詳細については、ホームページにアクセスしてください: https://github.com/obblalex/tx-logging。これが将来誰かを助けることを願っています。

于 2014-03-19T09:44:52.177 に答える