这是我的模块:
# 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
答案 0 :(得分:2)
您的模块不应该配置记录器本身(因为它没有足够的执行上下文知识),它是使用您的模块负责任的应用程序/脚本。想一想,并发应用程序使用的模块会在同一时刻写入同一文件,或者在磁盘空间有限(或根本没有磁盘空间)的设备上运行等等,会发生什么情况......
总而言之:如果你“无法修改main.py”,那么请“main.py”的所有者这样做(以他认为合适的方式)并让你访问他配置的任何内容如果他希望你能够调试任何东西。如果他不这样做,那就不再是你的问题了。