Python 使用 logging 模块添加多输出并设置不同的日志等级
需求:控制台输出简单的执行记录,文件输出详情的执行记录。
Python执行时需要看到执行过程。有些信息太长了直接输出不合适,但又要有记录,可以对不同的输出方式,按照不同的日志等级进行输出。
代码
# 日志记录
import logging
# logging.basicConfig(level = logging.DEBUG,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger("vnc")
logger.setLevel(logging.DEBUG) # 最低日志等级
log_format = logging.Formatter('%(asctime)s|%(name)s|%(levelname)-8s|%(message)s')
# 输出到文件
log_file = logging.FileHandler("get_video.log")
log_file.setLevel(logging.DEBUG)
log_file.setFormatter(log_format)
logger.addHandler(log_file)
# 直接输出显示
log_stream = logging.StreamHandler()
log_stream.setLevel(logging.INFO)
log_stream.setFormatter(log_format)
logger.addHandler(log_stream)
# 测试
logger.debug('Python debug')
logger.info('Python info')
logger.warning('Python warning')
logger.error('Python Error')
logger.critical('Python critical')
输出
- 控制台:直接输出的内容只有这些,没有debug等级
2022-08-05 19:31:14,486|vnc|INFO |Python info
2022-08-05 19:31:14,486|vnc|WARNING |Python warning
2022-08-05 19:31:14,486|vnc|ERROR |Python Error
2022-08-05 19:31:14,486|vnc|CRITICAL|Python critical
- 文件:输出到文件的日志有debug等级
2022-08-05 19:31:14,484|vnc|DEBUG |Python debug
2022-08-05 19:31:14,486|vnc|INFO |Python info
2022-08-05 19:31:14,486|vnc|WARNING |Python warning
2022-08-05 19:31:14,486|vnc|ERROR |Python Error
2022-08-05 19:31:14,486|vnc|CRITICAL|Python critical
后记
- 代码中
logging.basicConfig(...)
启用会造成输出混乱; logger.setLevel()
对低于该等级的日志丢弃,再转发给FileHandler
和StreamHandler
,因此该等级必须最低;- 未
setLevel()
时不会输出低等级的日志; logging.Formatter('%(levelname)-8s')
中-8
指定填充该字段的长度,但不会进行截断;- 原先的
print(str(),int())
要改为logger.debug(str(),+str(int()))
。