Python logging日志模块详解
在Python自动化测试(尤其是接口自动化)和日常开发中,日志是定位问题、跟踪程序运行状态的核心工具。
logging作为Python标准库中的内置模块,无需额外安装,即可提供灵活、强大的日志记录功能,既能输出日志到控制台,也能写入文件,还支持自定义日志级别和输出格式,完全满足不同场景下的日志需求。
一、logging模块核心介绍
logging是Python标准库中的一个模块,它提供了灵活的日志记录功能。
与print语句相比,logging的优势在于可控制日志级别、可自定义输出格式、可持久化到文件,更适合大型项目和自动化测试场景。
二、日志级别
logging模块定义了5个不同级别的日志,优先级从低到高依次为:DEBUG < INFO < WARNING < ERROR < CRITICAL。
核心规则:当设置某个日志级别后,只有高于或等于该级别的日志会被记录和输出,低于该级别的日志会被忽略。
-
DEBUG:调试信息,用于开发过程中定位代码细节,比如变量赋值、函数调用等,通常在开发阶段使用。
-
INFO:普通信息,用于告知程序正常运行状态,比如“程序启动成功”“接口请求完成”等。
-
WARNING:警告信息,提示程序可能存在潜在问题,但不影响程序继续运行,比如“参数未传入,使用默认值”。
-
ERROR:错误信息,程序出现错误,部分功能无法正常执行,比如“接口请求失败”“文件读取失败”。
-
CRITICAL:严重错误信息,程序出现致命错误,无法继续运行,比如“数据库连接失败”“核心函数报错”。
三、基础使用:全局logging
logging模块默认只输出WARNING及以上级别的日志,若需输出更低级别的日志(如INFO、DEBUG),需通过basicConfig()方法指定日志级别。
import logging
print("默认情况下,logging只输出warning及以上级别的日志")
#指定输出级别,输出info及以上级别日志
# logging.basicConfig(level=logging.INFO)
logging.debug("this is a debug message")
logging.info("this is a info message")
logging.warning("this is a warning message")
logging.error("this is a error message")
logging.critical("this is a critical message")

指定日志级别为INFO:
import logging
print("默认情况下,logging只输出warning及以上级别的日志")
#指定输出级别,输出info及以上级别日志
logging.basicConfig(level=logging.INFO)
logging.debug("this is a debug message")
logging.info("this is a info message")
logging.warning("this is a warning message")
logging.error("this is a error message")
logging.critical("this is a critical message")

代码说明:
-
导入logging模块后,默认日志级别为WARNING,因此DEBUG和INFO级别的日志不会输出。
-
通过logging.basicConfig(level=logging.INFO)将日志级别设置为INFO,此时INFO、WARNING、ERROR、CRITICAL级别的日志都会被输出,DEBUG级别仍被忽略。
四、自定义logger
全局logging适合简单场景,在自动化测试或大型项目中,更推荐使用自定义logger。
自定义logger可以灵活配置日志级别、输出目标(文件/控制台)、日志格式,还能区分不同模块的日志,便于问题定位。
import logging
logger = logging.getLogger("my_logger")
#给logger对象配置自己的日志级别
logger.setLevel(level=logging.DEBUG)
#创建文件处理器--将日志输出到mylog.log文件(没有则会自动创建)
handler = logging.FileHandler(filename="mylog.log")
# 创建⼀个⽇志格式器对象
formatter = logging.Formatter(
"%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d)] - %(message)s"
)
#将格式器设置到处理器上
handler.setFormatter(formatter)
#将文件处理器添加到日志记录器中
logger.addHandler(handler)
logger.debug("this is a debug message")
logger.info("this is a info message")
logger.warning("this is a warning message")
logger.error("this is a error message")
logger.critical("this is a critical message");
代码逐行解析(结合课件知识点)
-
创建自定义logger对象:
logger = logging.getLogger("my_logger")-
getLogger()方法用于获取一个日志记录器对象,括号内的参数是logger的名称(此处命名为"my_logger")。
-
若使用
logging.getLogger(__name__),则logger名称为当前模块名称,有助于在大型项目中区分不同模块的日志,两种命名方式均可,根据场景选择。
-
-
设置logger日志级别:
logger.setLevel(level=logging.DEBUG)-
将logger的日志级别设置为DEBUG,意味着所有DEBUG及以上级别的日志都会被记录(包括DEBUG、INFO、WARNING、ERROR、CRITICAL)。
-
注意:logger的级别优先级高于后面的处理器级别,若logger级别设置为INFO,即使处理器级别为DEBUG,也只会记录INFO及以上级别日志。
-
-
创建文件处理器:
handler = logging.FileHandler(filename="mylog.log")-
FileHandler是logging模块中的文件处理器,用于将日志信息写入指定文件。
-
若指定的文件(此处为mylog.log)不存在,程序会自动创建该文件;若文件已存在,新的日志会追加到文件末尾,不会清空原有内容。
-
-
创建日志格式器并绑定到处理器:
-
formatter = logging.Formatter("格式字符串"):创建格式器对象,定义日志的输出格式。 -
handler.setFormatter(formatter):将格式器绑定到文件处理器,确保写入文件的日志按照指定格式显示。
-
-
将处理器添加到logger:
logger.addHandler(handler)-
logger本身不具备输出日志的功能,必须添加处理器(如FileHandler、StreamHandler),才能将日志输出到指定目标(文件、控制台)。
-
若需要同时输出日志到控制台和文件,可再创建一个StreamHandler(控制台处理器),同样添加到logger中。
-
-
输出不同级别日志:通过logger.debug()、logger.info()等方法输出对应级别的日志,这些日志会按照指定格式写入mylog.log文件中。
日志占位符信息:
|
格式占位符 |
说明 |
|---|---|
|
%(asctime)s |
日志记录的时间戳,默认格式为“年-月-日 时:分:秒,毫秒”,可自定义时间格式。 |
|
%(levelname)s |
日志级别(如DEBUG、INFO、WARNING、ERROR、CRITICAL),清晰区分日志重要程度。 |
|
%(name)s |
日志记录器的名称(此处为"my_logger"),用于区分不同logger的日志。 |
|
%(filename)s |
日志记录发生的文件名(如我的练习代码中,文件名是test_jsonschema.py)。 |
|
%(funcName)s |
日志记录发生的函数名,若日志在函数外输出,则显示为<module>。 |
|
%(lineno)d |
日志记录发生的行号,整数格式,便于快速定位代码中的日志输出位置。 |
|
%(message)s |
日志消息本身,即logger.debug()、logger.info()等方法中传入的字符串。 |
上面代码中使用的格式字符串,会让日志输出如下格式(示例):

这种格式包含了时间、级别、logger名称、文件名、行号和日志消息,能快速定位问题,是自动化测试中最常用的日志格式。
七、总结
logging模块是Python自动化测试和开发中不可或缺的工具,其核心优势在于灵活可控、功能强大。
在接口自动化测试中,可在接口请求前、请求后输出日志,记录请求参数、响应结果、请求状态等,便于接口失败时定位问题,例如在发送接口请求后输出INFO级日志,接口报错时输出ERROR级日志。
更多推荐




所有评论(0)