【问题标题】:Python module level logging configuration via code issue通过代码问题的 Python 模块级日志记录配置
【发布时间】:2016-03-26 10:46:29
【问题描述】:

我正在尝试通过适用于三个输出的代码来获取模块级别的日志记录:文件、控制台和应用程序内部(QTextEdit)。

我可以让所有三个记录器都使用下面的代码,但是应用程序内部记录器没有记录所有事件,并且控制台记录器(仅)将每行打印两次。

我尝试过使用

logging.getLogger(__name__) 

对于文件记录器而不是根(不生成日志),对于控制台(每个日志输出只有 1 行工作正常)和 MyLogHandler (不生成日志)相同,并尝试了根记录器和'的各种组合name' logger 但无法让所有日志正常工作,并且控制台每个日志事件仅打印一行。

def configCodeRootExample_(self):
    logFileName = self.getLogLocation()
    rootLogger = logging.getLogger('')
    #This logger works
    fileLogger = logging.FileHandler(logFileName)
    fileLogger.setLevel(logging.INFO)
    fileFormatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
    fileLogger.setFormatter(fileFormatter)
    rootLogger.addHandler(fileLogger)
    #This logger works but prints output twice
    consoleFormatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(module)s - %(funcName)s - %(lineno)d - %(message)s')
    console = logging.StreamHandler()
    console.setLevel(logging.DEBUG)
    console.setFormatter(consoleFormatter)
    rootLogger.addHandler(console)
    #This logger works but only logs a subset of DEBUG events and no INFO events
    myLogHandler = GSLLogHandler()
    myLogHandler.setLevel(logging.DEBUG)
    myLogHandler.setFormatter(fileFormatter)
    rootLogger.addHandler(myLogHandler)

这里还要记录一下日志处理程序,以输出到正在监听的 QTextEdit:

import logging
from loggerpackage.logsignals import LogSignals

class MyLogHandler(logging.Handler): 
    def __init__(self):
        logging.Handler.__init__(self)
        self.logSignals = LogSignals()

    def emit(self, logMsg):
        logMsg = self.format(logMsg)
        self.logSignals.logEventTriggered.emit(logMsg)

如果我将控制台记录器更改为模块级别:

    logger = logging.getLogger(__name__)
    consoleFormatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(module)s - %(funcName)s - %(lineno)d - %(message)s')
    console = logging.StreamHandler()
    console.setLevel(logging.DEBUG)
    console.setFormatter(consoleFormatter)
    logger.addHandler(console)

然后每个日志事件只打印一行但格式不正确,似乎是某种默认格式化程序

【问题讨论】:

    标签: python python-3.x logging


    【解决方案1】:

    有关重复控制台日志记录的解决方案,请参见此处:How to I disable and re-enable console logging in Python?

    logger = logging.getLogger()
    lhStdout = logger.handlers[0]
    
    ... add log handlers
    
    logger.removeHandler(lhStdout)
    

    我在使用 MyLogHandler 时遇到的问题是 QTextEdit 上的插槽未及时连接以接收前几个 DEBUG 和 INFO 事件。

    【讨论】:

      猜你喜欢
      • 2015-01-13
      • 1970-01-01
      • 2014-06-11
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2013-05-21
      • 2011-02-27
      相关资源
      最近更新 更多