【问题标题】:can children of python loggers be deleted?可以删除 python 记录器的孩子吗?
【发布时间】:2015-07-06 16:48:19
【问题描述】:

我正在用 python 编写一个框架来实现一些服务器。它们连续运行,等待作业,当找到一个或多个作业时,它们可以处理它,启动一个或多个线程来处理它,或者启动一个子进程来处理它。当它在寻找作业时,日志数据应该进入一个文件,该文件将每天轮换。每个作业的日志数据将进入一个单独的作业日志文件,其名称基于作业 ID。

这是我第一次真正尝试使用 python 日志记录。这样做的“正确”方法是什么?一个想法是为每个作业添加一个子记录器,但似乎没有办法删除子记录器(我认为通过处理库代码并不难,但我假设没有 remove_child( ) 方法是有原因的)。

我正在考虑的另一种方法是为每个作业设置一个处理程序,并根据当前线程为每个作业设置一个过滤器。这样,所有处理程序都将被过滤掉,除了活动线程中的处理程序,它将记录到作业日志文件中。这种方式很容易在处理程序完成时删除它们。这可能会起作用 - 我预计任何工作一次不会有超过 10 个线程处于活动状态,因此为每个工作运行一个过滤器并不难。这是最好的方法吗?还是我没有想到的其他东西?

【问题讨论】:

    标签: python multithreading logging


    【解决方案1】:

    记录器与应用程序中的区域/代码中的位置相关,因此添加和删除记录器实际上没有意义。您使用每个作业的处理程序和过滤器描述的方法可以确保消息仅记录到一个文件中,并且您在第三方库中调用的任何代码也将其消息定向到适当的位置。虽然不是完全相同的情况,但我在 this post 中描述了这将如何适用于另一个多线程场景 - Web 应用程序。

    【讨论】:

      猜你喜欢
      • 2015-12-29
      • 2021-12-30
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多