[英]How to properly log errors/info with Python?
我正在構建一個GUI程序,其中包含幾個GUI(主)模塊和4個不同的QThread模塊。 我希望能夠正確記錄未處理的異常以及我指定的其他各種信息。 因此,我決定使用python的內置日志記錄模塊。
這是我將其配置為:
logging.basicConfig(filename="ubc.log",
format='%(asctime)-6s: %(name)s - %(levelname)s - %(module)s - %(funcName)s - %(lineno)d - %(message)s',
level=logging.DEBUG)
根據這個配置,我希望日志記錄模塊准確地告訴我錯誤/信息發生在哪一行,在哪個模塊中發生了什么功能,等等。但是,這就是我在日志中得到的信息(當我這樣做時logging.info("text")
):
2011-12-22 16:06:02,072: root - INFO - logging - info - 1592 - Calling load blog names function, tabWidget index is 0
不用說,大多數這些信息對我沒有用。 行號絕對不是1592,函數名稱不是info,並且模塊未記錄。
重申一下,我想要的是:當我說logging.info("log this")
,我希望它出現在日志中:
2011-12-22 16:06:02,072: root - INFO - WorkerThread1.py - upload_function(self, email, param) - line number 131 - log this
這樣有可能嗎?如果可以,怎么辦?
編輯 : 每個請求,我添加更多的代碼:
class UI(QMainWindow, ui_ui.Ui_MainWindow):
def __init__(self, parent=None):
super(BlogCreator, self).__init__(parent)
self.setupUi(self)
self.tabWidget.setCurrentIndex(0)
logging.info("Prda!")
logging.info("Prda!")
在GUI.py文件的第414行上。 如您所見,該消息應在每次軟件啟動時寫入(這是setupUi)。 它是書面的,但是這是書面的:
2011-12-22 16:53:04,209: root - INFO - logging - info - 1592 - Prda!
編輯#2經過進一步檢查,似乎是PyInstaller以某種方式將問題搞砸了。 直接通過解釋器運行軟件會產生預期的結果; 程序被編譯成EXE文件后,發生上述情況。
您可以發布完整的摘要嗎? 如果我按照您剛才所說的去做,就會得到正確的日志。 我將在此處發布腳本(名為stackoverflow_8613924.py
),以進行比較:
import logging
logging.basicConfig(filename=None, format='%(asctime)-6s: %(name)s - %(levelname)s - %(module)s - %(funcName)s - %(lineno)d - %(message)s', level=logging.DEBUG)
def fname():
logging.info('hello world')
fname()
執行它給我:
$ python stackoverflow_8613924.py
2011-12-23 09:05:35,678: root - INFO - stackoverflow_8613924 - fname - 6 - hello world
我無法重現您的問題。 這篇文章包含一個非常簡單的示例。 請嘗試一下,並告訴我們您是否成功獲得正確的結果:
myModule.py
:
import logging
logging.basicConfig(filename="myLogFile.log", \
format='%(asctime)-6s: %(name)s - %(levelname)s - %(module)s - %(funcName)s - %(lineno)d - %(message)s', \
level=logging.DEBUG)
def myFct():
logging.info("info at module.function level")
logging.info("info at module level")
myFct()
執行后,我的日志文件包含:
2011-12-23 10:35:09,743: root - INFO - myModule - <module> - 11 - info at module level
2011-12-23 10:35:09,743: root - INFO - myModule - myFct - 9 - info at module.class.function level
也許您正在尋找traceback模塊 :
import sys, traceback
try:
my_function()
except Exception:
exc_type, exc_value, exc_traceback = sys.exc_info()
msg = u"\n".join(traceback.format_tb(exc_traceback))
logging.error(msg)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.