Django记录 - 找不到Handler的日志文件

时间:2014-02-12 04:25:35

标签: django apache logging

我在Django项目中设置了日志记录。它在开发中在本地工作,但它在生产中造成麻烦。 settings.py位如下:

import os

PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))

. . .

'handlers': {
    'log_file': {
        'level': 'INFO',
        'class': 'logging.handlers.RotatingFileHandler',
        'filename': os.path.join(PROJECT_PATH, 'logs/django.log'),
        'maxBytes': '16777216',
        'formatter': 'verbose'
    },

. . .

我在/var/log/apache2/error.log

中不断收到此错误
ValueError: Unable to configure handler 'log_file': [Errno 2] No such file or directory: '/logs/django.log'

我已经通过运行代码并手动设置PROJECT_PATH在Django shell中对此进行了测试,它似乎返回了正确的路径。另外,我已经检查并检查了日志文件的权限。虽然没必要,但我将其更改为777只是为了测试。仍然没有运气。

当生产日志为空时,我的本地日志会填满我期望的所有内容。

考虑到这一点,我认为这个日志位置可能不是最好的,但如果它在生产中起作用,至少我知道......然后,我可以改变位置。

我错过了什么?

1 个答案:

答案 0 :(得分:4)

虽然我真的想得到答案,但我决定采取另一种方法,以便继续前进。看来这个问题没有引起足够的重视,我现在感觉不像是一个赏金,所以我暂时禁用了日志记录。无论如何,我将重新设计我的方法,所以这似乎是一个不错的主意。

我暂时提出的似乎有效并且没有给出错误的是(对于文件处理程序定义):

'file': {
    'level': 'DEBUG',
    'class': 'logging.FileHandler',
    'filename': '/some/fixed/path/to/logs/django.log',
},

请注意,在我使用从os.path.join(PROJECT_PATH, 'logs/django.log')派生的值之前。不知道为什么这不起作用,但它是罪魁祸首。所以即使这一点是正确的:PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))(甚至在python shell中确认),它还没有在生产中工作。