我配置了 django 日志记录并使用
./manage.py runserver
运行 DEBUG = False
,一切正常。但是,一旦我通过 URL 访问我的服务器,Apache 就会引发 500 错误,这是 error.log 的最后几行
ValueError: Unable to configure handler 'db_handler': [Errno 2] N
o such file or directory: '/logs/django_db.log'
这是声明 db_handler 的 settings.py 文件的片段。
#settings.py
...
'db_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': 'logs/django_db.log',
'maxBytes': 1024*1024*5, # 5 MB
'backupCount': 5,
'formatter':'standard',
},
...
我不确定我做错了什么。我还在包含
settings.py
的目录的父目录中创建了一个名为logs的目录,当我./manage.py runserver
时,它工作正常并在logs文件夹中创建文件。我很困惑。
看起来您的 Apache 服务器正在尝试创建此路径
/logs/django_db.log
。
我建议您设置
logs/django_db.log file
的绝对路径。
只需在路径上创建一个文件,例如:
/var/log/django_db.log
并确保apache
用户可以读取和写入该文件。
似乎您的脚本将
/
作为当前目录。尝试设置日志文件的绝对路径:
'db_handler': {
...
'filename': '/path/to/logs/django_db.log',
...
},
不要忘记权限。您的脚本很可能是从
www
或 nobody
用户运行的。
好吧,按照其他人的建议。我必须指向一个绝对路径。这就是我在
settings.py
中所做的
设置.py
'db_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, 'logs/django_db.log'),
'maxBytes': 1024*1024*5, # 5 MB
'backupCount': 5,
'formatter':'standard',
}
然后在父目录中我执行了此操作。
chmod 666 logs/*.log
现在一切都很好..:)
也许 Apache 无法解析 settings.py 文件中给定的相对路径。为了安全起见,请避免对 settings.py 文件中的链接进行硬编码。您可以使用python的
os
模块来构造django_db.log文件的绝对路径。例如,我的 SQLite 数据库文件路径为 db/mypy_app.db。现在要构造它的绝对路径,我会在我的 settings.py 文件中编写类似的内容:
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
SETTINGS_DIR = os.path.dirname(__file__)
PROJECT_PATH = os.path.join(SETTINGS_DIR, os.pardir)
PROJECT_PATH = os.path.abspath(PROJECT_PATH)
DATABASE_PATH = os.path.join(PROJECT_PATH, 'db/mypy_app.db')
DATABASE_PATH = os.path.abspath(DATABASE_PATH)
然后在代码中使用
DATABASE_PATH
变量。尝试对logs/django_db.log 文件执行类似的操作。无论您在任何系统上尝试,这都会起作用。