Python Logger中微秒格式无法正常生效问题求助
Python logging模块微秒格式不生效的解决办法
你遇到的问题是因为Python logging模块的Formatter默认不支持在%(asctime)s里解析%f格式符,它内部默认只处理到秒级,所以直接写%f会原样输出。
解决办法很简单,只需要给Formatter对象设置default_msec_format属性,让它支持微秒的格式化:
修改后的完整代码:
import logging, io stream = io.StringIO() logger = logging.getLogger("TestLogger") logger.setLevel(logging.INFO) logger.propagate = False log_handler = logging.StreamHandler(stream) log_format = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s', "%Y-%m-%d %H:%M:%S.%f %Z" ) # 关键设置:让asctime解析微秒 log_format.default_msec_format = '%s.%06d' log_handler.setFormatter(log_format) logger.addHandler(log_handler) logger.info("This is test info log") print(stream.getvalue())
说明
default_msec_format默认值是%s,%03d,仅处理三位毫秒数。改成%s.%06d后,会把六位微秒值填充到%f的位置。- 如果时区标识
%Z无法正确显示,可以考虑去掉该部分,或者确保系统时区配置正确。
运行修改后的代码,输出会变成类似:
2023-01-06 18:52:34.123456 UTC - TestLogger - INFO - This is test info log
内容的提问来源于stack exchange,提问作者user1700890
相关产品推荐
相关产品推荐

