Python 使用 logging 模块添加多输出并设置不同的日志等级

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() 对低于该等级的日志丢弃,再转发给 FileHandlerStreamHandler ,因此该等级必须最低;
  • setLevel() 时不会输出低等级的日志;
  • logging.Formatter('%(levelname)-8s')-8 指定填充该字段的长度,但不会进行截断;
  • 原先的 print(str(),int()) 要改为 logger.debug(str(),+str(int()))

猜你喜欢

转载自blog.csdn.net/u012101384/article/details/126184244