我正在构建一个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,函数名不是信息,模块没有记录。
重申一下,我想要的是:当我说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文件后,会发生上述情况。
答案 0 :(得分:3)
你可以发一个完整的片段吗?如果我按照你刚才说的做,我会得到一个正确的日志。我会在这里发布我的脚本(名为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
答案 1 :(得分:1)
我无法重现您的问题。这篇文章包含一个非常简单的例子。请试一试,告诉我们您是否成功获得了正确的结果:
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
答案 2 :(得分:0)
也许traceback module正是您所寻找的:
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)