2016-12-13 220 views
1

這裏的第一個問題不是英語母語,所以請不要太苛刻! :)Python日誌記錄到QTextEdit

我目前正在開發和使用或多或少簡單的Python腳本,直到現在,我用自定義的「髒」手動文件記錄功能。


我最近發現日誌模塊,和幾個測試後,我終於想通了基礎,這是很大的實際...所以,我想升級我的日誌部分,以適應日誌模塊

然而,我的應用程序已經相當先進,並且使用PySide進行GUI。我想設置處理程序來生成不同的日誌文件,但也有一個寫入到QTextEdit控制檯 - 如小部件...

(現在「writeLog」函數寫入主日誌文件(包含所有生成的日誌執行期間),並以的QTextEdit,另外,我寫我的應用程序的某些特定部位)


我怎樣才能做到這一點單獨的文件? (最簡單最好)我需要子類Handler類嗎? (現在在Python中會遠遠超過我的水平,但如果指導得當,爲什麼我不猜)還是我錯過了文檔中的某些內容?

由於提前,

靈光

+0

嗯,有一個潛在的缺陷。如果您的高級PySide GUI崩潰,那麼記錄器將無法顯示其日誌輸出,是嗎?相反,登錄文件或控制檯不是更好嗎?否則,我認爲繼承處理器並將Qt信號連接到更新QTextEdit的插槽非常簡單。去做就對了。究竟是什麼阻止你回來? – Trilarion

+1

感謝您的回答!事實上,如果應用程序在某些事情中崩潰,那麼日誌在這時會失敗(使用手動'with open()as ...'創建文件,但也使用日誌記錄)......也許我可以將日誌添加到控制檯中。無論如何,我在GUI中嵌入了一個控制檯,我希望能夠登錄到它。所以謝謝你確認子類的想法。除了事實上我是Python初學者這個事實之外,沒有任何東西能夠阻止我^^另外,這個應用程序作爲開發團隊的一個工具很短的時間,所以我會保留這個想法,但可能不會花時間來做這個額外的工作開發尚未... – Manu310

回答

2

可以使用自定義記錄器,而不是你的writeLog功能。這很容易。例如:

class GuiLogger(logging.Handler): 
    def emit(self, record): 
     self.edit.append_line(self.format(record)) # implementation of append_line omitted 

h = GuiLogger() 
h.edit = yourTextEditWidget # this should be done in __init__ 
logging.getLogger().addHandler(h) 

現在logging.info("nice")會將日誌保存到GUI小部件。