首页 > 解决方案 > 如何同时从多个 python 线程正确写入日志文件?

问题描述

我有多个线程正在运行,每个线程都会将一些内容写入同一个日志文件。我怎么能这样做?

我目前的解决方案是open("log.txt", 'a').write("something\n"),但我不知道是否有太多打开的连接最终会失败或导致混乱的输出,例如

something
sosomethingmething

或类似的。有没有更好的办法?

标签: pythonpython-3.xlogging

解决方案


出于日志记录的目的,您可以使用日志记录模块。日志模块是线程安全的,将为您处理锁定。

https://docs.python.org/3/howto/logging.html

您甚至可以添加%(threadName)s格式logging.Logger,这样您就会知道哪个线程将给定的行写入日志文件。MWE 遵循:

import logging
logger = logging.getLogger()
formatter = logging.Formatter('%(asctime)s - %(threadName)s - %(name)s - %(levelname)s - %(message)s')
stderrHandler = logging.StreamHandler() # Will output to STDERR.
stderrHandler.setFormatter(formatter)

推荐阅读