我有以下应用程序结构:
./utils.py
def do_something(logger=None):
if not logger:
logger = logging.getLogger(__name__)
print('hello')
logger.debug('test')
./one.py
from utils import do_something
logger = logging.getLogger(__name__)
do_something(logger=logger)
./two.py
from utils import do_something
logger = logging.getLogger(__name__)
do_something(logger=logger)
现在,运行该程序,日志输出将显示正在使用这些函数的各个模块的名称(one
and two
) 而不是utils
。然后,我使用此信息(记录器的名称)来过滤消息。
有没有办法做到这一点,而不必将记录器作为参数传递?我是否必须基本上内省调用者函数并基于此初始化记录器?当整个代码库都使用一个函数但记录器应该是调用该函数的记录器时,这种类型的配方的常见解决方案是什么?
多变的logger
是全局的,可以从内部访问do_something()
像这样的函数:
logger = logging.getLogger(__name__)
def do_something():
x = logger
仔细阅读后:
当一个功能时,这种类型的配方的常见解决方案是什么
在整个代码库中使用,但记录器应该是那些
调用函数?
In 简单的英语将会:
如何访问全局变量logger
来自导入的函数do_something()
?
我的结论是,没有别的办法了!
对于这种特殊情况,您必须传递 logger 作为参数。
from utils import do_something
logger = logging.getLogger(__name__)
do_something() # logger global is not visible in do_something()
do_something(logger=logger) # the only way
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)