我正在使用"多处理。过程"以启动多个子区域。每个子程序都是相同的 python 脚本,它实例化 Logger 并将不同的级别写入日志文件。只要它是相同的脚本,它就会在每个子进程中创建具有相同名称的记录器。
此外,每个子进程都有唯一的 ID 并记录信息,包括该唯一 ID。
我发现日志文件完全缺少一些ID,即整个子进程没有日志输出。
答案在这里:
尽管日志记录是线程安全的,并且支持从单个进程中的多个线程记录到单个文件,但不支持从多个进程记录到单个文件,因为在 Python 中没有标准方法可以跨多个进程序列化对单个文件的访问。如果您需要从多个进程记录到单个文件,一种方法是将所有进程记录到 SocketHandler,并有一个单独的进程来实现套接字服务器,该套接字服务器从套接字读取并记录到文件。(如果您愿意,可以在现有进程之一中专用一个线程来执行此功能。本节更详细地记录了这种方法,并包括一个工作套接字接收器,可用作您在自己的应用程序中进行调整的起点。
如果您使用的是包含多处理模块的最新版本的 Python,则可以编写自己的处理程序,该处理程序使用此模块中的 Lock 类来序列化从进程对文件的访问。现有的文件处理程序和子类目前不使用多处理,尽管它们将来可能会这样做。请注意,目前,多处理模块并未在所有平台上提供有效的锁定功能(请参阅 https://bugs.python.org/issue3770)。
https://docs.python.org/2/howto/logging-cookbook.html#logging-cookbook