首先使用basicConfig快速配置日志,或手动创建Logger、Handler、Formatter实现灵活控制;通过FileHandler、StreamHandler等设置输出目标与级别,避免重复日志需检查addHandler调用及propagate设置。

在Python中配置Logging处理器,关键是通过logging模块设置日志记录方式。你可以使用基础配置快速上手,也可以手动创建Logger、Handler、Formatter来实现更灵活的控制。
使用basicConfig快速配置
对于简单项目,可以直接用logging.basicConfig()设置默认的日志行为:
- 指定日志级别:比如DEBUG、INFO、WARNING等
- 选择输出目标:可以是控制台或文件
- 定义格式:包括时间、日志级别、消息内容等
示例:
import logginglogging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler("app.log"), logging.StreamHandler() # 输出到控制台 ] )
logger = logging.getLogger(name) logger.info("这是一条信息日志")
手动添加处理器(Handler)
当需要更精细控制时,建议手动创建Logger并绑定多个处理器。每个处理器可独立设定输出位置和日志级别。
立即学习“Python免费学习笔记(深入)”;
- FileHandler:写入文件
- StreamHandler:输出到终端
- RotatingFileHandler:按大小轮转日志文件
- TimedRotatingFileHandler:按时间轮转
示例:同时输出到文件和控制台,并区分级别
import logging from logging.handlers import RotatingFileHandler创建Logger
logger = logging.getLogger("my_app") logger.setLevel(logging.DEBUG)
创建Formatter
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
文件处理器(仅ERROR以上)
file_handler = RotatingFileHandler("error.log", maxBytes=1024*1024, backupCount=3) file_handler.setLevel(logging.ERROR) file_handler.setFormatter(formatter)
控制台处理器(INFO及以上)
console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) console_handler.setFormatter(formatter)
添加处理器
logger.addHandler(file_handler) logger.addHandler(console_handler)
使用
logger.info("程序启动") logger.error("发生错误")
避免重复日志输出
如果发现日志重复打印,通常是因为Logger和Handler都启用了传播(propagate),或者多次添加了同一个Handler。
- 确保不要重复调用
addHandler - 子Logger可通过设置
propagate=False阻止向上传递 - 检查是否在循环或导入中反复配置
基本上就这些。根据项目复杂度选择合适的方式,小项目用basicConfig,大项目推荐手动管理Logger和Handler。











