Django 日志记录 - 未找到处理程序的日志文件

nic*_*ius 6 apache django 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'
    },

. . .
Run Code Online (Sandbox Code Playgroud)

我不断收到此错误/var/log/apache2/error.log

ValueError: Unable to configure handler 'log_file': [Errno 2] No such file or directory: '/logs/django.log'
Run Code Online (Sandbox Code Playgroud)

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

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

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

我错过了什么?

nic*_*ius 5

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

我暂时想到的似乎有效并且不会出错的是这个(对于文件处理程序定义):

'file': {
    'level': 'DEBUG',
    'class': 'logging.FileHandler',
    'filename': '/some/fixed/path/to/logs/django.log',
},
Run Code Online (Sandbox Code Playgroud)

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