2020年5月31日 / 564次阅读 / Last Modified 2020年5月31日
logging模块
与其说这是logging模块的使用误区,不如说是一个功能,只是大家没有太注意到而已。logging在记录日志的时候,message部分有一种内置的拼接方式,符合字符串%-style风格的拼接方式。
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# bad
logging.debug('Hello {0}, {1}!'.format('World', 'Congratulations'))
# good
logging.debug('Hello %s, %s!', 'World', 'Congratulations')
这里有两种打印 Log 的方法,第一种使用了字符串的 format() 的方法进行构造,传给 logging 的只用到了第一个参数,实际上 logging 模块提供了字符串格式化的方法,我们只需要在第一个参数写上要打印输出的模板,占位符用 %s、%d 等表示即可,然后在后续参数添加对应的值就可以了,推荐使用这种方法。
运行结果如下:
2018-06-03 22:27:51,220 - root - DEBUG - Hello World, Congratulations!
2018-06-03 22:27:51,220 - root - DEBUG - Hello World, Congratulations!
提供这个功能的代码,就在logRecord类中的getMessage函数中:
def getMessage(self):
"""
Return the message for this LogRecord.
Return the message for this LogRecord after merging any user-supplied
arguments with the message.
"""
msg = str(self.msg)
if self.args:
msg = msg % self.args
return msg
self.args通过packing的方式保存了所有%-style风格的字符串参数。
-- EOF --
本文链接:https://www.pynote.net/archives/2025
©Copyright 麦新杰 Since 2019 Python笔记