如何在每个线程的基础上创建日志记录/记录器?

时间:2015-10-15 17:56:14

标签: python logging python-multithreading

我相信我有一个独特的用例。在大多数其他情况下,仅从所有线程登录到单个文件是完全令人满意的。这对我不起作用,将单个线程中的日志记录到仅包含该线程日志的特定文件中非常重要。

我还将一个并发模型应用于一个大型且当前迭代的代码库,该代码库已在不同模块中的所有位置实现了日志记录,并且我尝试尽可能少地更改代码。

我可以想到几个看似有点hacky的解决方案,涉及检测当前代码是否在一个线程中执行,所以我想知道是否有一个很好的pythonic方法来做到这一点

1 个答案:

答案 0 :(得分:3)

如果您已经在使用logging模块,那么非常简单。你应该有这样的东西:

log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
file_handler = logging.FileHandler('mylog.log')
file_handler.setFormatter(logging.Formatter('%(message)s'))
log.addHandler(file_handler)

log.debug('this is awesome!')

然后转到logging.Formatter并添加%(thread)d%(threadName)s并加注!你有一个线程感知记录器!

所以,它看起来像这样:

logging.Formatter('%(thread)d - %(threadName)s - %(levelname)s - %(message)s')

然后.. grep它。瞧!无需改变任何其他内容。

如果您有兴趣,请参阅以下所有内容:https://docs.python.org/2/library/logging.html#logrecord-attributes