python - python记录器的子项可以被删除吗?

标签 python multithreading logging

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

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

我想到的另一种方法是为每个作业设置一个处理程序,并根据当前线程为每个作业提供一个过滤器。这样,除了事件线程中的处理程序之外,所有处理程序都将被过滤掉,该处理程序将记录到作业日志文件中。这种方式可以很容易地在处理程序完成时将其删除。这可能会起作用 - 我预计任何作业同时事件的线程不会超过 10 个左右,因此为每个作业运行过滤器并不难。这是最好的方法吗?还是还有什么我没想到的?

最佳答案

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

关于python - python记录器的子项可以被删除吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31251368/

相关文章:

windows-phone-7 - Windows Phone 应用程序中是否有异常日志记录组件?

python - 如何将字典绑定(bind)为准备好的查询参数?

Odoo 标题按钮上的 JavaScript 事件

java - 登录 Unix 位置

c++ - 如何在多线程 C++ 中实现 "soft barrier"

c# - 将 C# ConcurrentBag<T> 与多个生产者和单个消费者一起使用

logging - Kubernetes pod 不记录日志,但容器正在记录到 Docker 守护进程

python - Pandas Dataframe 上两列的条件更新

java - Python 相当于 java 中的双冒号 (::) 运算符

python Tkinter 多线程