0

这是我的模块:

# module.py
import logging

logging.basicConfig(filename='app.log')

logger = logging.getLogger(__name__) 

def method(x):
    logger.info('x is %s', x)
    return x + x

我的模块被第三方脚本使用,问题是做了一些覆盖我的日志设置。

# main.py
import logging
from logging.config import dictConfig
from module import method

logger = logging.getLogger(__name__) 

def setup_loghandlers():
    dictConfig({
        "version": 1,
        "disable_existing_loggers": False,

        "handlers": {
            "console": {
                "level": "DEBUG",
                "class": "logging.StreamHandler"
            },
        },

        "root": {
            "handlers": ["console"],
            "level": "INFO",
        }
    })

setup_loghandlers()

y = method(20)
logger.info('y is %s', y)

现在如果我运行main.py,我会在控制台中获取所有日志,而我真正需要的是 module.py 的日志转到 app.log 文件

PS:我不能修改main.py,我只能修改我的module.py

4

1 回答 1

2

您的模块不应该配置记录器本身(因为它对执行上下文没有足够的了解),它是应用程序/脚本使用您的模块的责任来做。考虑一下并发应用程序使用的模块会发生什么情况,这些应用程序都试图同时写入同一个文件,或者在磁盘空间受限(或根本没有磁盘空间)的设备上运行等等......

长话短说:如果您“无法修改 main.py”,那么请“main.py”的所有者这样做(以他认为合适的方式)并让您访问想要的任何配置你能够调试任何东西。如果他不这样做,那不再是你的问题了。

于 2013-09-30T15:39:05.583 回答