前言在开发 Python 项目时日志记录是不可或缺的一环。相比printlogging模块提供了分级输出、多目标输出控制台、文件、格式化等强大功能。本文将从零开始结合实战代码带你彻底掌握logging的使用。1. 日志级别与数值Python 日志定义了以下标准级别数值越高越严重级别数值适用场景DEBUG10详细调试信息INFO20常规运行信息WARNING30警告程序仍可运行ERROR40错误部分功能失效CRITICAL50致命错误程序可能崩溃关键点logger.setLevel(level)会过滤掉低于该级别的所有日志。每个处理器也可以独立设置级别实现精细化控制。2. 核心组件Logger日志记录器应用程序直接调用。Handler处理器决定日志输出到哪里控制台、文件、网络等。Formatter格式化器定义日志的显示样式。3. 实战同时输出到控制台和文件基于你的62.logging基础.pyimport logging # 1. 创建 Logger logger logging.getLogger(my_app) logger.setLevel(logging.DEBUG) # 全局总开关 # 2. 控制台处理器StreamHandler console_handler logging.StreamHandler() console_handler.setLevel(logging.INFO) # 只输出 INFO 及以上 console_formatter logging.Formatter( %(asctime)s - %(name)s - %(levelname)s - %(message)s ) console_handler.setFormatter(console_formatter) # 3. 文件处理器FileHandler file_handler logging.FileHandler(app.log, encodingutf-8) file_handler.setLevel(logging.WARNING) # 只记录 WARNING 及以上 file_formatter logging.Formatter( %(asctime)s - %(filename)s:%(lineno)d - %(levelname)s - %(message)s ) file_handler.setFormatter(file_formatter) # 4. 添加处理器到 Logger logger.addHandler(console_handler) logger.addHandler(file_handler) # 5. 测试 logger.debug(调试信息不会出现在控制台和文件) logger.info(普通信息控制台可见文件不可见) logger.warning(警告控制台和文件都记录) logger.error(错误控制台和文件都记录) logger.critical(严重错误控制台和文件都记录)运行结果控制台输出仅 INFO、WARNING、ERROR、CRITICALtext2025-03-30 12:00:00 - my_app - INFO - 普通信息控制台可见文件不可见 2025-03-30 12:00:01 - my_app - WARNING - 警告控制台和文件都记录 2025-03-30 12:00:02 - my_app - ERROR - 错误控制台和文件都记录 2025-03-30 12:00:03 - my_app - CRITICAL - 严重错误控制台和文件都记录文件app.log内容2025-03-30 12:00:01 - 62.logging基础.py:35 - WARNING - 警告控制台和文件都记录 2025-03-30 12:00:02 - 62.logging基础.py:36 - ERROR - 错误控制台和文件都记录 2025-03-30 12:00:03 - 62.logging基础.py:37 - CRITICAL - 严重错误控制台和文件都记录4. 多 Logger 实例实际项目中可以为不同模块创建独立的 Logger每个可拥有不同的处理器和级别。如下创建用户模块专用日志logger2 logging.getLogger(用户模块) logger2.setLevel(logging.DEBUG) file_handler2 logging.FileHandler(user.log, encodingutf-8) file_handler2.setLevel(logging.WARNING) file_formatter2 logging.Formatter(%(asctime)s - %(levelname)s - %(name)s - %(message)s) file_handler2.setFormatter(file_formatter2) logger2.addHandler(file_handler2) logger2.warning(用户登录失败)5. 进阶技巧使用basicConfig快速配置适合简单脚本。日志轮转使用RotatingFileHandler或TimedRotatingFileHandler防止日志过大。配置文件通过logging.config.dictConfig将配置写在 YAML/JSON 中便于运维。总结logging模块灵活而强大掌握 Logger、Handler、Formatter 三者的组合你可以轻松构建生产级别的日志系统。建议在实际项目中尽早引入日志避免后期用print填坑。