【发布时间】: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