我正在使用QtCore.QThread
(来自PyQt4
)。
要记录,我还使用以下格式化程序:
logging.Formatter('%(levelname)-8s %(asctime)s %(threadName)-15s %(message)s')
生成的日志是:
DEBUG 2012-10-01 03:59:31,479 Dummy-3 my_message
我的问题是我想更明确地知道哪个线程正在记录... Dummy-3
对我来说不是最明确的名字....
有没有办法将日志名称设置为QtCore.QThread
,可以使用日志模块(作为LogRecord属性),以使日志更有意义?
谢谢!
答案 0 :(得分:4)
如果线程模块可用,则日志记录模块将使用threading.current_thread().name
设置threadName
LogRecord属性。
但是threading.current_thread
threading.current_thread
表示如果线程模块没有创建当前线程(因此是“Dummy-x”名称),将使用虚拟线程对象。
我认为可以通过猴子补丁extra
将名称重置为更合适的名称。但是,更好的方法是在记录消息时使用logging.Formatter('%(levelname)-8s %(asctime)s %(qthreadname)-15s %(message)s')
...
extras = {'qthreadname': get_qthreadname()}
logging.warning(message, extra=extras)
字典:
{{1}}
答案 1 :(得分:0)
在Qt5 documentation中,您可以调用setObjectName()来修改线程名称
要选择要给您的线程指定的名称(例如,在Linux上由命令ps -L标识),可以在启动线程之前调用setObjectName()。
如果不调用setObjectName(),则给线程提供的名称将是线程对象的运行时类型的类名(例如,对于Mandelbrot示例,为“ RenderThread”,因为QThread子类的名称。
不幸的是,它还指出:
当前在Windows的发行版中不可用。