记录配置由他人覆盖

时间:2013-09-30 14:51:45

标签: python logging

这是我的模块:

# 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

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

# 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

1 个答案:

答案 0 :(得分:2)

您的模块不应该配置记录器本身(因为它没有足够的执行上下文知识),它是使用您的模块负责任的应用程序/脚本。想一想,并发应用程序使用的模块会在同一时刻写入同一文件,或者在磁盘空间有限(或根本没有磁盘空间)的设备上运行等等,会发生什么情况......

总而言之:如果你“无法修改main.py”,那么请“main.py”的所有者这样做(以他认为合适的方式)并让你访问他配置的任何内容如果希望你能够调试任何东西。如果他不这样做,那就不再是你的问题了。