Django 日志记录在 apache 中不起作用。?
Django logging not working in apache.?
我用 DEBUG = False
配置了 django 日志记录和 运行 ./manage.py runserver
,一切正常。但是,一旦我通过 URL 访问我的服务器,Apache 就会引发 500 错误,这是 error.log
的最后几行
ValueError: Unable to configure handler 'db_handler': [Errno 2] N
o such file or directory: '/logs/django_db.log'
这里是 settings.py 文件中声明 db_handler.
的片段
#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
中所做的
#settings.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 文件中对 link 进行硬编码。您可以使用 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 文件做类似的事情。无论您在任何系统上尝试,这都会起作用。
我用 DEBUG = False
配置了 django 日志记录和 运行 ./manage.py runserver
,一切正常。但是,一旦我通过 URL 访问我的服务器,Apache 就会引发 500 错误,这是 error.log
ValueError: Unable to configure handler 'db_handler': [Errno 2] N
o such file or directory: '/logs/django_db.log'
这里是 settings.py 文件中声明 db_handler.
的片段 #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
#settings.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 文件中对 link 进行硬编码。您可以使用 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 文件做类似的事情。无论您在任何系统上尝试,这都会起作用。