我的项目由许多命名空间包组成,我想为它们正确设置日志记录:它们旨在被其他“前端”用作库。
假设我有这种情况,对于包 foo.xyz:
foo/
__init__.py
xyz/
__init__.py
bar.py
baz.py
我的想法是保留生成日志的位置的信息,例如在 bar.py 中
import logging
log = logging.getLogger(__name__)
log.addHandler(logging.NullHandler()) # Python 2.7
log.setLevel(....)
但是我不确定如何从前端(从不同的包中导入几个位)调用它以轻松显示所有内容。例如,我正在使用 foo.abc 和 foo.xyz,按照上面的设置进行日志记录。我想使用传播,但目前这不起作用:
from foo.xyz import bar
from foo.abc import baz
log = logging.getLogger()
log.addHandler(logging.StreamHandler())
log.setLevel(logging.DEBUG)
do_my_stuff()
但是,库的记录器不会生成任何输出。我究竟做错了什么?
编辑:到目前为止,如果我得到与父模块的命名空间相对应的记录器,我可以获得输出:
log = logging.getLogger("foo.xyz")
但是,我试图在一次调用中获取所有内容:我想知道我是否可以这样做,因为正如我之前所写的,这组包使用命名空间。