2015-12-20 30 views
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) 

那麼只有爲每個日誌事件打印一行,但格式不正確,似乎是某種默認格式化程序

回答

0

在這裏看到了解決重複控制檯記錄: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事件沒有連接。