Python logging日志模块详解

张开发
2026/4/21 1:29:14 15 分钟阅读

分享文章

Python logging日志模块详解
在Python自动化测试尤其是接口自动化和日常开发中日志是定位问题、跟踪程序运行状态的核心工具。logging作为Python标准库中的内置模块无需额外安装即可提供灵活、强大的日志记录功能既能输出日志到控制台也能写入文件还支持自定义日志级别和输出格式完全满足不同场景下的日志需求。一、logging模块核心介绍logging是Python标准库中的一个模块它提供了灵活的日志记录功能。与print语句相比logging的优势在于可控制日志级别、可自定义输出格式、可持久化到文件更适合大型项目和自动化测试场景。二、日志级别logging模块定义了5个不同级别的日志优先级从低到高依次为DEBUG INFO WARNING ERROR CRITICAL。核心规则当设置某个日志级别后只有高于或等于该级别的日志会被记录和输出低于该级别的日志会被忽略。DEBUG调试信息用于开发过程中定位代码细节比如变量赋值、函数调用等通常在开发阶段使用。INFO普通信息用于告知程序正常运行状态比如“程序启动成功”“接口请求完成”等。WARNING警告信息提示程序可能存在潜在问题但不影响程序继续运行比如“参数未传入使用默认值”。ERROR错误信息程序出现错误部分功能无法正常执行比如“接口请求失败”“文件读取失败”。CRITICAL严重错误信息程序出现致命错误无法继续运行比如“数据库连接失败”“核心函数报错”。三、基础使用全局logginglogging模块默认只输出WARNING及以上级别的日志若需输出更低级别的日志如INFO、DEBUG需通过basicConfig()方法指定日志级别。import logging print(默认情况下logging只输出warning及以上级别的日志) #指定输出级别输出info及以上级别日志 # logging.basicConfig(levellogging.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)指定日志级别为INFOimport logging print(默认情况下logging只输出warning及以上级别的日志) #指定输出级别输出info及以上级别日志 logging.basicConfig(levellogging.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(levellogging.INFO)将日志级别设置为INFO此时INFO、WARNING、ERROR、CRITICAL级别的日志都会被输出DEBUG级别仍被忽略。四、自定义logger全局logging适合简单场景在自动化测试或大型项目中更推荐使用自定义logger。自定义logger可以灵活配置日志级别、输出目标文件/控制台、日志格式还能区分不同模块的日志便于问题定位。import logging logger logging.getLogger(my_logger) #给logger对象配置自己的日志级别 logger.setLevel(levellogging.DEBUG) #创建文件处理器--将日志输出到mylog.log文件没有则会自动创建 handler logging.FileHandler(filenamemylog.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(levellogging.DEBUG)将logger的日志级别设置为DEBUG意味着所有DEBUG及以上级别的日志都会被记录包括DEBUG、INFO、WARNING、ERROR、CRITICAL。注意logger的级别优先级高于后面的处理器级别若logger级别设置为INFO即使处理器级别为DEBUG也只会记录INFO及以上级别日志。创建文件处理器handler logging.FileHandler(filenamemylog.log)FileHandler是logging模块中的文件处理器用于将日志信息写入指定文件。若指定的文件此处为mylog.log不存在程序会自动创建该文件若文件已存在新的日志会追加到文件末尾不会清空原有内容。创建日志格式器并绑定到处理器formatter logging.Formatter(格式字符串)创建格式器对象定义日志的输出格式。handler.setFormatter(formatter)将格式器绑定到文件处理器确保写入文件的日志按照指定格式显示。将处理器添加到loggerlogger.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级日志。

更多文章