【问题标题】:Python logging: different logging destination per processPython日志记录:每个进程不同的日志记录目标
【发布时间】:2012-05-18 17:03:04
【问题描述】:

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

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

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

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')

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

我该如何解决这个问题?

【问题讨论】:

    标签: python logging multiprocessing


    【解决方案1】:

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

    local_logger.propagate = False
    

    【讨论】:

    • 我可能会补充一点,恕我直言,使用 basicConfig() 可能不是最适合您的情况的选择。正如我的同事 Jason 向我指出的那样,它确实适用于非常简单的日志记录设置。我建议考虑使用更“复杂”的方法;通过谷歌搜索很容易找到几种方法。
    【解决方案2】:

    您可以按照 Art Swri 的方式进行操作,或者直接省略 basicConfig() 调用。这就是向根记录器添加控制台处理程序的原因。

    【讨论】:

      猜你喜欢
      • 2017-06-04
      • 2013-05-14
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多