我有一个用Python编写的复杂代码,它有很多线程和许多try-catch块。我正在为我的线程使用Python的线程模块。有没有Python内置的方式来了解我的线程退出的原因以及在什么时间?我的代码中有一些竞争条件,我无法缩小范围。在线程退出时明确地在每个除块或打印时间内打印故障会增加大量我不想要的日志记录。
答案 0 :(得分:0)
基于this的信息性日志记录示例,其中包含您需要的所有信息,您可以更改格式并添加/删除要在输出日志中显示的更多/更少信息的属性。
import logging
class ConnInfo:
def __getitem__(self, name):
"""
To allow this instance to look like a dict.
"""
from random import choice
if name == 'ip':
result = choice(['127.0.0.1', '192.168.0.1'])
else:
result = self.__dict__.get(name, '?')
return result
def __iter__(self):
keys = ['ip', 'user']
keys.extend(self.__dict__.keys())
return keys.__iter__()
if __name__ == '__main__':
from random import choice
levels = (logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.CRITICAL)
a1 = logging.LoggerAdapter(logging.getLogger('a.b.c'),
{ 'ip' : '123.231.231.123', 'user' : 'sheila' })
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)-15s %(name)-5s %(levelname)-8s IP: %(ip)-15s Thread: %(threadName)s: %(message)s')
a1.debug('A debug message')
a1.info('An info message with %s', 'some parameters')
a2 = logging.LoggerAdapter(logging.getLogger('d.e.f'), ConnInfo())
for x in range(10):
lvl = choice(levels)
lvlname = logging.getLevelName(lvl)
a2.log(lvl, 'A message at %s level with %d %s', lvlname, 2, 'parameters')
输出: 2016-07-07 09:13:46,255 a.b.c DEBUG IP:123.231.231.123线程:
MainThread:调试消息2016-07-07 09:13:46,256 a.b.c INFO IP:
123.231.231.123线程:MainThread:带有一些参数的信息消息2016-07-07 09:13:46,256 d.e.f CRITICAL IP:192.168.0.1
线程:MainThread:具有2个参数的CRITICAL级别的消息 2016-07-07 09:13:46,256 d.e.f关键IP:127.0.0.1主题:
MainThread:具有2个参数的CRITICAL级别的消息2016-07-07
09:13:46,256 d.e.f警告IP:192.168.0.1线程:MainThread:A
警告级别的消息,带有2个参数2016-07-07 09:13:46,256
d.e.f错误IP:127.0.0.1线程:MainThread:来自
的消息 ERROR级别有2个参数2016-07-07 09:13:46,256 d.e.f INFO
IP:127.0.0.1线程:MainThread:INFO级别的消息,带有2
参数2016-07-07 09:13:46,256 d.e.f关键IP:192.168.0.1
线程:MainThread:具有2个参数的CRITICAL级别的消息 2016-07-07 09:13:46,256 d.e.f警告IP:192.168.0.1线程:
MainThread:WARNING级别的消息,带有2个参数2016-07-07
09:13:46,256 d.e.f关键IP:127.0.0.1线程:MainThread:A
具有2个参数的CRITICAL级别的消息2016-07-07 09:13:46,256
d.e.f DEBUG IP:192.168.0.1线程:MainThread:来自
的消息 具有2个参数的调试级别2016-07-07 09:13:46,256 d.e.f警告
IP:192.168.0.1线程:MainThread:警告级别的消息
有2个参数