Python logging模块正常输出固定文本但无法写入变量值问题
问题原因
- logging模块的日志方法参数规则和
print()不同:print()支持传入多个参数,会自动把所有参数转成字符串后拼接输出;但logging.info()等日志方法的第一个入参只能是格式化字符串,后续入参是用来填充格式化字符串中占位符的参数,如果格式化字符串没有对应占位符,后续传入的变量内容不会被写入日志。 - 你写的
logging.info('y = ', y)中,y会被识别为多余的占位符填充参数,当前面的字符串没有占位符时,这部分内容直接被忽略,所以日志里看不到y的值,类中的self.变量无法写入也是相同的原因。
解决方法
以下几种写法都可以正常输出变量内容,类中的self.xxx变量也可以用相同规则处理:
- 使用logging原生占位符(官方推荐,性能最优)
logging.info('y = %s', y) # 打印self变量示例 logging.info('self.name = %s', self.name)
这种写法如果当前日志级别未开启,不会执行字符串拼接操作,性能比预先拼接字符串更好。
- 使用f-string拼接(Python3.6+支持,写法最直观)
logging.info(f'y = {y}') # 打印self变量示例 logging.info(f'self.name = {self.name}')
- 使用str.format拼接
logging.info('y = {}'.format(y)) # 打印self变量示例 logging.info('self.name = {}'.format(self.name))
修改完成后重新运行代码,日志文件就会出现INFO:root:y = 100的对应变量输出内容。
内容的提问来源于stack exchange,提问作者StressedBoi69420
相关产品推荐
相关产品推荐

