【发布时间】:2019-02-16 10:28:20
【问题描述】:
我一直在尝试理解 python 中的日志记录。我有一个 init 模块、两个其他模块和一个主模块。出于某种原因,当我运行我的模块时,日志详细信息会跳过代码流并在其他输出之前首先打印
谁能告诉我为什么会这样
这是__init__.py
from dir1.mod1 import FirstClass
from dir1.mod2 import SecondClass
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
f_handler=logging.FileHandler('python_logs.log')
f_handler.setLevel(logging.DEBUG)
c_handler = logging.StreamHandler()
c_handler.setLevel(logging.ERROR)
f_formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
c_formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
f_handler.setFormatter(f_formatter)
c_handler.setFormatter(c_formatter)
logger.addHandler(f_handler)
logger.addHandler(c_handler)
这是在另外两个模块中(写在resp类的__init__()里面
self.logger = logging.getLogger(__name__)
在其中一个模块中定义的 addn() 函数的 sn-p
def addn(self):
z=self.x +self.y
print('sum is '+z)
self.logger.error('incrementing number!')
self.logger.info('Still incrementing number!!')
return z
我的主要模块(我运行的)有这个:
from dir1.mod1 import FirstClass
from dir1.mod2 import SecondClass
number = FirstClass(2,2)
print('addition results')
number.addn()
我期待如下输出
加法结果
总和是 3
dir1.mod1 - 错误 - 递增数字!
但我得到的是
dir1.mod1 - 错误 - 递增数字!
dir1.mod1 - 错误 - 递增数字!
加法结果:
总和是 3
为什么首先打印的日志信息会跳出代码流?还有谁能告诉我为什么日志信息会被打印两次??
【问题讨论】:
-
在您的
addn函数中,您正在混合print和日志记录。如果将print替换为self.logger.info会发生什么?我怀疑打印和记录器的冲洗不会按照您想象的顺序发生。 -
在这种情况下,理想情况下应该首先打印“加法结果”,因为它在调用 addn 函数之前执行,对吗?...但是在日志消息之后我仍然得到加法结果