Django登录不在生产中

时间:2013-08-21 14:34:42

标签: django logging python-2.7 production archlinux

我无法在生产中获得日志记录工作(arch linux)。在本地机器上它工作正常。以下是日志记录设置:

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
    'verbose': {
        'format': 'LEVEL:%(levelname)s TIME:%(asctime)s MODULE:%(module)s LINE:%(lineno)d PROCESS:%(process)d THREAD:%(thread)d MESSAGE:%(message)s'
    },
},
'filters': {
    'require_debug_false': {
        '()': 'django.utils.log.RequireDebugFalse'
    }
},
'handlers': {
    'mail_admins': {
        'level': 'ERROR',
        'filters': ['require_debug_false'],
        'class': 'django.utils.log.AdminEmailHandler'
    },
    'logfile': {
        'level':'DEBUG',
        'class':'logging.FileHandler',
        'filename':  "logs/logfile314.txt",
        'formatter': 'verbose',
    }
},
'loggers': {
    'django.request': {
        'handlers': ['mail_admins'],
        'level': 'ERROR',
        'propagate': True,
    },
    'myLog': {
        'handlers': ['logfile'],
        'level': 'DEBUG',
    },
}

}

当我将其部署到生产时,我在apache日志中看到了这个错误:

ValueError: Unable to configure handler 'logfile': [Errno 13] Permission denied: '/srv/http/logs/logfile314.txt'

所以我将/srv/http/logs的权限修改为:

drwxrwxrwx  2 root root  4.0K Aug 21 16:05 logs

现在应用程序甚至没有启动,2-3分钟前页加载中断后,在apache日志中出现此错误:

Fatal Python error: PyEval_AcquireThread: NULL new thread state
[Wed Aug 21 16:05:58 2013] [notice] child pid 32559 exit signal Aborted (6)
[Wed Aug 21 16:11:03 2013] [error] [client 89.142.110.111] Premature end of script headers: wsgi.py

但是我很久没有改变wsgi.py了。一切正常,如果我删除我的日志设置或者我给了哪个http用户没有权限的路径。我尝试将绝对路径放到日志文件中,因为/srv/http/logs probaly不是放置日志文件的正确位置,但即使这样也行不通。

有关如何将日志记录用于生产的任何想法或建议吗?

2 个答案:

答案 0 :(得分:2)

我设法通过将这行代码放到apache配置文件来解决问题:

WSGIApplicationGroup %{GLOBAL}

可在此处找到解释:https://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API

答案 1 :(得分:0)

我遇到了同样的错误。我发现如果我创建了一个新的文件夹和文件,那么user-name和group-name都是Apache。错误将被遗漏。