如何在Django中区分自定义日志与boto3等第三方库日志?
解决Django项目中boto3调试日志过多的问题
核心原因
你用logging.basicConfig(level=logging.DEBUG)把根日志器的级别设为了DEBUG,而boto3、botocore、s3transfer这些依赖库的日志器没有单独配置级别,会继承根日志的DEBUG级别,导致大量调试信息输出。
可行解决方案
方案1:移除全局basicConfig,通过Django日志配置单独管理自己的应用日志
- 删除代码中的
logging.basicConfig(level=logging.DEBUG),避免全局设置根日志级别。 - 在你的
DEFAULT_LOGGING配置的loggers节点下,添加自己应用的日志器配置(假设你的应用名为myapp):
DEFAULT_LOGGING = { # ... 原有配置 ... 'loggers': { # ... 原有loggers配置 ... 'myapp': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, } }
这样只有你自己应用的日志会输出DEBUG级别内容,其他未配置的日志器(包括boto3相关)会使用默认的WARNING级别,不会输出调试信息。
方案2:单独限制boto3相关日志器的级别
如果不想移除basicConfig,可以在初始化日志的代码里,直接把boto3相关依赖的日志级别调高:
import logging logging.basicConfig(level=logging.DEBUG) # 限制boto3相关日志器的级别 logging.getLogger('boto3').setLevel(logging.WARNING) logging.getLogger('botocore').setLevel(logging.WARNING) logging.getLogger('s3transfer').setLevel(logging.WARNING) logger = logging.getLogger(__name__)
boto3的调试日志主要来自botocore和s3transfer,所以需要同时设置这几个日志器的级别。
方案3:在Django日志配置中添加boto3相关日志器规则
直接在DEFAULT_LOGGING的loggers里配置boto3相关日志器的级别,覆盖根日志的设置:
DEFAULT_LOGGING = { # ... 原有配置 ... 'loggers': { # ... 原有loggers配置 ... 'boto3': { 'level': 'WARNING', 'propagate': False, }, 'botocore': { 'level': 'WARNING', 'propagate': False, }, 's3transfer': { 'level': 'WARNING', 'propagate': False, }, } }
propagate: False可以避免这些日志器的日志传递到根日志器,进一步确保不会被输出。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

