【问题标题】:twisted log level switch扭曲的日志级别开关
【发布时间】:2012-11-24 18:05:40
【问题描述】:

在 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)

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

【问题讨论】:

标签: logging twisted


【解决方案1】:

我研究了来自mg. 和其他来源的答案,并实现了一个小型库tx-logging。您将能够以常用的 Python 方式编写日志:

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

访问主页以获取信息:https://github.com/oblalex/tx-logging。希望这对将来的人有所帮助。

【讨论】:

    【解决方案2】:

    首先,您使用的api不存在。它没有记录在模块中 级别但log.msgdocumented here:所有非关键字参数都通过 到log.msg 是消息的一部分,所以在这里你没有设置消息 级别,但在您的消息中添加一个整数,顺便说一下这种形式 气馁。

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

    其次,回答您的问题,是的,您可以指示twisted 使用 日志级别来确定应该记录哪些消息,但这不是如何 默认记录器有效。幸运的是,个性化扭曲有些自然 (如果你知道怎么做的话)。

    你必须编写一个记录器观察者,例如你可以扩展 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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2011-11-03
      • 2011-04-11
      • 2012-02-24
      • 2014-12-25
      • 1970-01-01
      • 2015-06-23
      相关资源
      最近更新 更多