【发布时间】:2014-02-03 07:52:24
【问题描述】:
上下文:
Python 2.7。
同一文件夹中的两个文件:
- 首先:主脚本。
- 第二个:自定义模块。
目标:
可以在没有任何冲突的情况下使用logging 模块(参见下面的输出)。
文件:
a.py:
import logging
from b import test_b
def test_a(logger):
logger.debug("debug")
logger.info("info")
logger.warning("warning")
logger.error("error")
if __name__ == "__main__":
# Custom logger.
logger = logging.getLogger("test")
formatter = logging.Formatter('[%(levelname)s] %(message)s')
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)
# Test A and B.
print "B"
test_b()
print "A"
test_a(logger)
b.py:
import logging
def test_b():
logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
输出:
如下所示,日志显示两次。
python a.py
B
WARNING:root:warning
ERROR:root:error
A
[DEBUG] debug
DEBUG:test:debug
[INFO] info
INFO:test:info
[WARNING] warning
WARNING:test:warning
[ERROR] error
ERROR:test:error
有人能解决这个问题吗?
编辑:不运行 test_b() 将不会导致日志重复和正确的日志格式(预期)。
【问题讨论】:
-
您的描述说日志显示两次“正在加载模块 B.py”。但是在您的示例输出中,它不会在加载 B.py 时显示两次,甚至在运行
test_b时不会显示两次,而只会在运行test_a(logger)时显示。那么……是什么让您认为模块 B 甚至与您的问题有关? -
^ 已编辑。经过几次测试,似乎如果 A.py 只运行
test_a(logger)而不是test_b(),则日志不会重复并且格式良好(预期)。因此,不仅仅是 B.py 被加载...
标签: python python-2.7 logging