我创建了一些 Python 文件,使我的函数有点分开,以方便工作/修复。所有文件都在一个目录中。该结构可能会分解为以下内容:
- a.py(具有基本内容的 A 类)
- b.py(具有基本内容的 B 类)
- modA.py(创建一个从 A 和 B 派生的 C 类)
- modB.py(创建从 A 和 B 派生的 D 类)
- ...
- main_a.py(使用 C 类)
- main_b.py(使用 D 类)
每个模块都使用来自 python 的日志记录。一个为什么如此 - 只写入根记录器消息。而且我没有看到我的错误。
这是一个最小的例子。
a.py
import logging
logger = logging.getLogger(__name__)
class A(object):
def __init__(self):
logger.debug("Instance of A")
b.py
import logging
logger = logging.getLogger(__name__)
class B(object):
def __init__(self):
logger.debug("Instance of B")
ab.py
import a
import b
import logging
logger = logging.getLogger(__name__)
class AB(a.A, b.B):
def __init__(self):
logger.debug("Instance of AB")
a.A.__init__(self)
b.B.__init__(self)
main_one.py
import sys
import ab
import logging
import logging.handlers
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler(stream=sys.stderr)
handler.setLevel(logging.DEBUG)
handler.setFormatter(logging.Formatter('%(name)s: %(message)s'))
logger.addHandler(handler)
logger.warning("The trouble starts")
ab = ab.AB()
我也尝试使用类似的东西self.logger = logging.getLogger(type(self).__name__)
来记录每个类的基础,但结果是一样的。那么,你们中的哪一位可以指出我在阅读 python 日志记录手册时出错的地方吗?
TIA。
编辑 1:我的解决方案
感谢@falsetru 和@Jakub M.,使用这两个答案可以得到一个可行的解决方案。
首先,我将所有内容都放在一个层次结构中。
main_one.py
lib/
__init__.py
ab.py
basic/
__init__.py
a.py
b.py
其次,我将logger = logging.getLogger(__name__)
in更改main_one.py
为logger = logging.getLogger()
(没有根记录器的名称!)。
那成功了。
非常有用的是GitHub 上的代码片段。