【问题标题】:Why can my Django app not write to its log file?为什么我的 Django 应用程序无法写入其日志文件?
【发布时间】:2011-05-05 06:36:26
【问题描述】:

$ sudo /etc/init.d/apache2 重启

 * Restarting web server apache2  
 ... waiting .   ...done.  

username@servername Thu Nov 04 18:54:37 ~/public_html/IDM_app
$ sudo tail -n 60 /var/log/apache2/error.log

[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38] mod_wsgi (pid=28760): Exception occurred processing WSGI script '/home/username/public_html/idm.wsgi'.  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38] Traceback (most recent call last):  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/site-packages/Django-1.2.3-py2.7.egg/django/core/handlers/wsgi.py", line 230, in __call__  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     self.load_middleware()  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/site-packages/Django-1.2.3-py2.7.egg/django/core/handlers/base.py", line 33, in load_middleware  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     for middleware_path in settings.MIDDLEWARE_CLASSES:  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/site-packages/Django-1.2.3-py2.7.egg/django/utils/functional.py", line 276, in __getattr__  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     self._setup()  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/site-packages/Django-1.2.3-py2.7.egg/django/conf/__init__.py", line 40, in _setup  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     self._wrapped = Settings(settings_module)  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/site-packages/Django-1.2.3-py2.7.egg/django/conf/__init__.py", line 73, in __init__  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     mod = importlib.import_module(self.SETTINGS_MODULE)  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/site-packages/Django-1.2.3-py2.7.egg/django/utils/importlib.py", line 35, in import_module  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     __import__(name)  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/home/username/public_html/IDM_app/settings.py", line 60, in <module>  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     from settings_local import *  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/home/username/public_html/IDM_app/settings_local.py", line 1, in <module>  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     from settings_Slicehost_idm import *  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/home/username/public_html/IDM_app/settings_Slicehost_idm.py", line 12, in <module>  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     format='%(pathname)s TIME: %(asctime)s MSG: %(filename)s:%(funcName)s:%(lineno)d %(message)s',  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/logging/__init__.py", line 1500, in basicConfig  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     hdlr = FileHandler(filename, mode)  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/logging/__init__.py", line 889, in __init__  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     StreamHandler.__init__(self, self._open())  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/logging/__init__.py", line 908, in _open  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     stream = open(self.baseFilename, self.mode)  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38] IOError: [Errno 13] Permission denied: '/home/username/public_html/IDM_app/log/django.osqa.log'  
[Thu Nov 04 18:54:36 2010] [notice] caught SIGTERM, shutting down  
[Thu Nov 04 18:54:37 2010] [notice] Apache/2.2.14 (Ubuntu) mod_wsgi/3.3 Python/2.7 configured -- resuming normal operations  

username@servername Thu Nov 04 18:54:42 ~/public_html/IDM_app
$ ls -l /home/username/public_html/IDM_app/log/django.osqa.log

-rw-r--r-- 1 username 0 Nov  4 18:24 /home/username/public_html/IDM_app/log/django.osqa.log  

username@servername Thu Nov 04 19:08:41 ~/public_html/IDM_app
**$ ls -l ~/public_html/idm.wsgi **

-rw-r--r-- 1 username 222 Nov  4 18:53 /home/username/public_html/idm.wsgi  

username@servername Thu Nov 04 19:10:50 ~/public_html/IDM_app
$ cat ~/public_html/idm.wsgi

import os
import sys

sys.path.append('/home/username/public_html/IDM_app/')

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

用户名@服务器名 11 月 4 日星期四 19:11:02 ~/public_html/IDM_app $ whoami

username

如果 Apache2 使用虚拟主机设置文件@~/public_html/idm.wsgi,系统认为哪个用户正在尝试写入日志文件 log/django.osqa.log ?

为什么我的 Django 应用无法写入其日志文件?

【问题讨论】:

    标签: python django apache2 mod-wsgi


    【解决方案1】:

    Apache 可能以apache 用户身份运行,这意味着它没有对日志文件的写入权限。它可以正常启动,因为它只需要读取 wsgi 文件,该文件对所有用户都具有读取权限。 chmod a+w django.osqa.logchown &lt;apache-user&gt; django.osqa.log

    注意:首选方法是 chown 文件。

    注意 2:这是依赖于发行版的,但由于它看起来是 Ubuntu-y,因此 apache 用户将是 www-data

    【讨论】:

    • 使用chgrp 代替chown 也是一种选择。
    • 或者甚至更好地使用 ACL
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 2016-01-15
    • 2012-05-31
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    相关资源
    最近更新 更多