答案是使用logging模块配置Logger、Handler、Formatter实现自定义日志。首先创建命名Logger并设置级别,接着添加StreamHandler和FileHandler指定输出目标,分别设置级别;然后定义Formatter控制格式,包含时间、名称、级别和消息;最后将Handler绑定到Logger完成配置,即可按需输出日志。

在Python中实现自定义日志,核心是使用内置的logging模块,通过配置Logger、Handler、Formatter和Filter来自定义日志的输出格式、级别和目标位置。下面介绍如何一步步实现一个灵活实用的自定义日志系统。
创建自定义Logger
每个应用通常需要一个独立的Logger实例,避免影响全局配置。
- 使用
logging.getLogger(name)获取一个命名的Logger,名称通常用__name__ - 设置日志级别(如DEBUG、INFO、WARNING等),低于该级别的日志不会被处理
示例:
import logginglogger = logging.getLogger(name) logger.setLevel(logging.DEBUG)
添加Handler指定输出方式
Handler决定日志输出到哪里,比如控制台、文件,甚至网络或邮件。
立即学习“Python免费学习笔记(深入)”;
-
StreamHandler:输出到控制台 -
FileHandler:输出到文件 -
RotatingFileHandler:按大小轮转日志文件 -
TimedRotatingFileHandler:按时间轮转
可以同时添加多个Handler,实现既打印到终端又写入文件。
示例:
# 输出到控制台 console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO)输出到文件
file_handler = logging.FileHandler("app.log") file_handler.setLevel(logging.DEBUG)
自定义日志格式
通过Formatter控制日志的显示样式,比如是否包含时间、行号、日志级别等。
- 常用格式字段:
%(asctime)s、%(name)s、%(levelname)s、%(message)s、%(lineno)d - 可设置时间格式,如
%Y-%m-%d %H:%M:%S
示例:
formatter = logging.Formatter(
fmt='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
将Handler绑定到Logger
把配置好的Handler添加到Logger,即可生效。
logger.addHandler(console_handler) logger.addHandler(file_handler)
之后就可以正常使用了:
logger.debug("这是调试信息")
logger.info("程序启动")
logger.warning("注意:资源即将耗尽")
基本上就这些。只要合理组织Logger结构,配合不同Handler和格式,就能满足大多数项目的日志需求。不复杂但容易忽略细节,比如忘记设级别或重复添加Handler导致日志重复输出。











