【接口自动化】(4) logging 日志
2026/5/8 18:42:21 网站建设 项目流程

一、简介

Python 自带标准库,用于记录程序运行日志。可设置输出到控制台/文件/网络,支持日志分级、格式化。

二、日志级别

  • DEBUG:调试详细信息
  • INFO:程序正常运行提示
  • WARNING:警告,不影响运行
  • ERROR:功能错误
  • CRITICAL:严重错误,程序崩溃
  • 级别排序:
DEBUG < INFO < WARNING < ERROR < CRITICAL

三、Farmatter 格式器

# 设置格式 formatter = logging.Formatter( "%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] %(message)s" )

每个%(xxx)s都是一个日志变量:

占位符意思
%(asctime)s日志打印的时间
%(levelname)s日志级别(DEBUG/INFO/WARNING...)
%(name)s日志器名字
%(filename)s哪个文件打印的日志
%(funcName)s哪个函数打印的日志
%(lineno)d代码第几行打印的
%(message)s你写的日志内容

四、全局 logging

设置 logging.INFO 表示 INFO 及其以上级别都会输出(都是配置根日志器,但是 logging.getLogger() 更细致,它是先拿到日志对象,再配置。logging.basicConfig 是直接全部配置了):

import logging # 设置全局 logging logging.basicConfig( level=logging.INFO, # 全局输出级别 format="...", # 全局格式 filename="app.log" # 全局输出到文件 ) logging.debug('This is a debug message') logging.info('This is an info message') logging.warning('This is a warning message') logging.error('This is an error message') logging.critical('This is a critical message')

五、Logger 日志器

logger 是当前模块的日志器(如果没有参数,就是根日志器,当前模块的日志器没有 handler 时,就会向上寻找 root 的 handler),logging 是全局的(两者设置的级别冲突时,以全局为准):

# 日志器 logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG)

六、Handler 处理器

负责输出日志

import logging # 日志器 logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) # 控制台输出 console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) # 文件输出 file_handler = logging.FileHandler("app.log") file_handler.setLevel(logging.DEBUG) # 格式 formatter = logging.Formatter( "%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] %(message)s" ) console_handler.setFormatter(formatter) file_handler.setFormatter(formatter) # 自定义过滤器:只允许 INFO 级别日志通过 # InfoFilter 类继承 logging.Filter 类,重写 filter 方法 # 当日志的级别编码为 logging.INFO 时返回 true class InfoFilter(logging.Filter): def filter(self, record): # record.levelno 日志级别数字 # 等于INFO就返回True放行,其他全部拦截 return record.levelno == logging.INFO # 控制台处理器,添加 info 过滤器 console_handler.addFilter(InfoFilter()) # 日志器添加控制器 logger.addHandler(console_handler) logger.addHandler(file_handler) # 输出日志 if __name__ == "__main__": logger.debug('This is a debug message') logger.info('This is an info message') logger.warning('This is a warning message') logger.error('This is an error message') logger.critical('This is a critical message')

结果:控制台只输出 info 级别的日志,文件输出了全部。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询