使用Django1.11和Python2.7配置file日志处理器遇权限拒绝错误求助
解决Django 1.11 + Python 2.7日志handler权限拒绝问题
你碰到的这个ValueError: Unable to configure handler 'file': [Errno 13] Permission denied错误,本质是运行Django的进程没有权限写入指定的日志文件路径——也就是/var/log/welnity/debug.log或者它的父目录/var/log/welnity。下面是具体的解决步骤:
1. 先排查权限现状
首先确认日志目录和文件的权限情况:
- 先检查
/var/log/welnity目录是否存在,如果不存在先创建:sudo mkdir -p /var/log/welnity - 查看目录的所属用户和权限:
ls -ld /var/log/welnity - 如果
debug.log已经存在,查看文件的权限:ls -l /var/log/welnity/debug.log - 同时确定运行Django的用户是谁:
- 本地开发用
runserver的话,就是你当前登录的系统用户; - 生产环境用uWSGI/nginx的话,通常是
www-data(Debian/Ubuntu)或者apache(CentOS)。
- 本地开发用
2. 针对性修复权限
根据上面的排查结果,选一种方式修复:
方式一:修改目录/文件的所属用户(推荐,更安全)
把日志目录的所有权改成运行Django的用户,比如假设运行用户是www-data:
sudo chown -R www-data:www-data /var/log/welnity
如果文件已经存在,这条命令会同时修改目录下所有文件的所有权。
方式二:调整目录/文件的权限(仅在方式一不可行时使用)
如果不想修改所有权,可以给目录添加其他用户的写权限(注意:生产环境尽量避免这种方式,有安全风险):
# 给目录添加所有用户的写权限 sudo chmod -R 775 /var/log/welnity # 给已存在的日志文件添加写权限 sudo chmod 664 /var/log/welnity/debug.log
3. 本地开发的临时替代方案
如果是本地开发测试,不想折腾系统目录权限,可以直接把日志文件路径改到项目内的目录:
在settings.py的LOGGING配置中,修改handler 'file'的filename:
import os LOGGING = { # 其他配置... 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', # 改成项目根目录下的logs文件夹 'filename': os.path.join(BASE_DIR, 'logs/debug.log'), }, }, # 其他配置... }
然后在项目根目录创建logs文件夹:
mkdir logs
这样本地用户肯定有权限写入这个目录。
额外提醒
注意Python 2.7和Django 1.11都已经停止官方维护了,不再接收安全更新,如果是生产环境项目,建议尽早规划升级到Python 3.x + 受支持的Django版本。
报错回溯信息:
Traceback (most recent call last): File "manage.py", line 22, in <module> execute_from_command_line(sys.argv) File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line utility.execute() File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 337, in execute django.setup() File "/usr/local/lib/python2.7/site-packages/django/__init__.py", line 22, in setup configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) File "/usr/local/lib/python2.7/site-packages/django/utils/log.py", line 75, in configure_logging logging_config_func(logging_settings) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py", line 794, in dictConfig dictConfigClass(config).configure() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py", line 576, in configure '%r: %s' % (name, e)) ValueError: Unable to configure handler 'file': [Errno 13] Permission denied: '/var/log/welnity/debug.log'
内容的提问来源于stack exchange,提问作者colonelrascals
相关产品推荐
相关产品推荐

