日志记录模块无法加载好的配置

Logging module can't load the good configuration

当我的模块 A 被我的模块 B 导入时,我不知道如何使用不同的日志记录配置,而是使用另一个日志记录配置。关于如何解决这个问题的任何想法?

模块A代码:

logging.basicConfig(filename="/var/log/ModuleA",format="%(asctime)s %(message)s",datefmt="%d/%m/%Y %H:%M:%S")
log=logging.getLogger(__name__)
logging.Formatter.converter = time.gmtime
logging.setLevel(logging.DEBUG)

模块B代码:

import ModuleA      
logging.basicConfig(filename="/var/log/ModuleB",format="%(asctime)s %(message)s",datefmt="%d/%m/%Y %H:%M:%S")                                                                                                                                                                                          log=logging.getLogger(__name__)
logging.Formatter.converter = time.gmtime
logging.setLevel(logging.DEBUG)

basicConfig 每个进程只能 运行 一次(或者,当根记录器没有配置时)。

如果您希望不同的模块登录到不同的位置,则必须相应地配置它们的记录器——最好是在导入模块的应用程序代码中执行此操作,而不是在模块本身中执行此操作。定义日志输出的去向与他们无关。

例如,您可以使用 the dictConfig API 配置两个命名记录器,module1module2,以及它们的处理程序和格式化程序:

import logging
from logging.config import dictConfig

dictConfig(
    {
        "version": 1,
        "disable_existing_loggers": False,
        "formatters": {"my_format": {"format": "%(asctime)s %(message)s", "datefmt": "%d/%m/%Y %H:%M:%S",},},
        "handlers": {
            "file_a": {"level": "INFO", "class": "logging.FileHandler", "filename": "a.log", "formatter": "my_format",},
            "file_b": {"level": "INFO", "class": "logging.FileHandler", "filename": "b.log", "formatter": "my_format",},
        },
        "loggers": {
            "module1": {"handlers": ["file_a"], "level": "INFO", "propagate": False,},
            "module2": {"handlers": ["file_b"], "level": "INFO", "propagate": False,},
        },
    }
)

然后,假设这些在 module1module2 中:

log1 = logging.getLogger("module1")
log1.info("Hello")
log2 = logging.getLogger("module2")
log2.info("World")

你最终会在 a.log 中得到 Hello,在 b.log 中得到 World