集成AWS S3的Django项目执行命令前加载AWS请求的问题咨询
我之前在做Django+S3的项目时也遇到过这个糟心的问题——每次跑python manage.py migrate或者其他命令,终端都会刷一堆EC2的请求响应日志,完全挡住了命令本身的输出。其实这是AWS的Python SDK(botocore/boto3)在调试日志级别下的默认输出,SDK初始化时会自动调用EC2的DescribeRegions接口,同时把整个请求响应都打出来了。
给你几个亲测有效的解决办法:
调整AWS SDK的日志级别(最推荐)
直接在Django的settings.py里添加日志配置,把botocore和boto3的日志级别调高,过滤掉调试信息:import logging # 抑制botocore和boto3的调试日志,只保留警告及以上信息 logging.getLogger('botocore').setLevel(logging.WARNING) logging.getLogger('boto3').setLevel(logging.WARNING)加完之后再执行命令,那些冗长的请求日志就会消失了,完全不影响S3的正常功能。
检查是否开启了AWS调试环境变量
有时候可能不小心设置了BOTO_DEBUG或者AWS_DEBUG环境变量,这会强制SDK输出调试日志。你可以在终端里检查:echo $BOTO_DEBUG echo $AWS_DEBUG如果输出是
1或者True,就把这些变量取消掉——要么在你的shell配置文件(比如.bashrc/.zshrc)里删掉对应的export语句,要么临时执行:unset BOTO_DEBUG unset AWS_DEBUG检查第三方存储后端的配置
如果你用的是django-storages这类S3存储后端,确认它的配置里没有开启调试模式。比如在settings.py里有没有类似AWS_DEBUG = True的设置,有的话改成False就行。
另外补充下:那个EC2请求是SDK初始化时的常规操作,用来检测可用区域,本身没有问题,只是日志输出太烦人而已,调整日志级别就完美解决啦。
内容的提问来源于stack exchange,提问作者Zorgan

