我一直在尝试理解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()函数的片段
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
和 logging。如果你用self.logger.info
替换print
,会发生什么?我怀疑打印和记录器的刷新顺序并不是你想象的那样。 - ma3oun