Python 日志记录 : different logging destination per process

标签 python logging multiprocessing

我刚开始使用 Python 日志记录模块,有些东西看不懂。

我正在编写一个按以下方式工作的脚本:

第 1 部分(单进程):它获取一些数据进行计算(如何计算并不重要)。 在这里,我通过以下方式创建一个记录器:

import logging
logging.basicConfig(format='%(asctime)-6s: %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger('Pipeline')
logger.setLevel(logging.INFO)
logger.warning('Pipeline started')

换句话说,我登录到屏幕。

第二部分(多处理):我创建了几个进程(数据分析真的很耗时和CPU)来分析之前找到的数据。

现在我希望每个进程只记录到​​不同的文件而不记录到屏幕。

我写的是:

fh = logging.FileHandler('/tmp/'+multiprocessing.current_process().name+'_worker.log')
fmt = logging.Formatter(%(asctime)-6s: %(name)s - %(levelname)s - %(message)s)
fh.setFormatter(fmt)
local_logger = logging.getLogger(multiprocessing.current_process().name+'_worker')
local_logger.addHandler(fh)
local_logger.warning(multiprocessing.current_process().name + ' (worker) Process started')

我得到的是每个进程都记录到不同的文件,但同时也记录到屏幕!

我该如何解决这个问题?

最佳答案

怀疑您的本地记录器将其日志消息向上传递到顶层,在那里它将输出到标准输出。尝试关闭本地记录器上的传播。我相信你可以这样做:

local_logger.propagate = False

关于Python 日志记录 : different logging destination per process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10656831/

相关文章:

python - 我有几个 Linux 命令,我想在 Windows 机器上运行。如何在 Windows 上从 Python 运行 Linux 命令

python - 在 python 中将输入分割成行

linux - AWS EC2 实例应用程序日志

python - 尝试理解跨 python 模块的多处理和队列

Python:线程还是多处理?

python - python 中的进程是否有自己的 os.environ 副本?

python - CoreML - 多数组输入需要在应用程序或模型中进行预处理?

python - 如何对 pandas 中的索引和列进行分组

java - 从命令提示符运行 jar 文件时如何在 log4j.properties 文件中指定日志文件位置

c# - 如何在不依赖于客户端应用程序或 web.config 的 dll 中使用 log4net?