记录到两个不同的 .log 文件

Logging to two different .log files

我想将请求日志放在不同的文件中。不幸的是,下面的代码实际上创建了 2 个不同的 .log 文件,但所有日志都在第一个文件中,而第二个文件完全是空的。 basicConfig 是否可以设置成日志落在不同的文件中?

import logging
import time

def example_request_handler(name):
    logging.basicConfig(
        level=logging.INFO,
        format="%(asctime)s [%(levelname)s] %(message)s",
        handlers=[
            logging.FileHandler(f"{name}.log"),
            logging.StreamHandler()])
    logging.info(name)

example_request_handler("first_request1")
example_request_handler("secound_request2")

一旦将日志记录处理程序添加到 logging.basicConfig,即使您重新配置它们,它们仍将保持原样。

Python3.8中,在logging.basicConfig中引入了一个新的force参数。如果此关键字参数指定为 true,则在执行其他参数指定的配置之前,将删除并关闭附加到根记录器的任何现有处理程序。

这将使您的功能成为 -

import logging
import time

def example_request_handler(name):
    logging.basicConfig(
        level=logging.INFO,
        force = True,
        format="%(asctime)s [%(levelname)s] %(message)s",
        handlers=[
            logging.FileHandler(f"{name}.log"),
            logging.StreamHandler()])
    logging.info(name)

example_request_handler("first_request1")
example_request_handler("second_request2")

上面应该只在第二个文件中记录 second_request2

请注意,removing/adding 为每个新日志设置新的日志记录处理程序通常不是一个好主意。如果您想登录到 n 个不同的文件,请考虑为它们初始化不同的记录器,并在管理器函数中保留记录器的映射,您的个人日志记录函数可以使用它。