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

问题描述

当模块B导入我的模块A时,我不知道如何使用其他日志记录配置,但是使用另一种日志记录配置。有关如何解决此问题的任何想法?

模块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",datefmt="%d/%m/%Y %H:%M:%S")                                                                                                                                                                                          log=logging.getLogger(__name__)
logging.Formatter.converter = time.gmtime
logging.setLevel(logging.DEBUG)

解决方法

basicConfig只能在每个进程中运行一次(或者,当root logger没有配置时)。

如果要使不同的模块登录到不同的位置,则必须相应地配置其记录器-最好在导入模块的应用程序代码中进行配置,而不是在模块本身中进行配置。定义日志输出的位置并不在乎他们。

例如,您可以使用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","filename": "b.log","loggers": {
            "module1": {"handlers": ["file_a"],"level": "INFO","propagate": False,"module2": {"handlers": ["file_b"],}
)

然后,假装它们在module1module2中:

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

您最终在Hello中有a.log,在World中有b.log

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...