0
我想通過代碼工作的三個輸出獲取模塊級日誌記錄:文件,控制檯和應用程序內部(QTextEdit)。通過代碼問題的Python模塊級日誌記錄配置
我可以得到所有三個記錄器與下面的代碼一起工作,但應用程序內部記錄器沒有記錄所有事件,並且控制檯記錄器(僅)打印每行兩次。
我已經使用
logging.getLogger(__name__)
爲文件記錄器,而不是根(沒有生成日誌)嘗試過,同樣爲控制檯(正常工作與每個日誌僅輸出1線)和同爲MyLogHandler(無日誌生成)並嘗試了根記錄器和'名稱'記錄器的各種組合,但無法使所有日誌都能正常工作,並且控制檯僅在每個日誌事件中打印一行。
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)
那麼只有爲每個日誌事件打印一行,但格式不正確,似乎是某種默認格式化程序