如何在Apache上用日志调试Django?
我把我的Django网站部署在Apache上了,但遇到了一个在我开发机器上没有出现的问题,所以我想打印一些变量出来看看发生了什么。
我尝试使用Python的日志模块,代码是这样的:
import os, logging
FILE = os.getcwd()
logging.basicConfig(filename=os.path.join(FILE,'log.txt'),level=logging.DEBUG)
logging.debug('Write')
在我的开发机器上,可能会在Django项目的根目录下生成一个log.txt文件。但是当我在服务器上做同样的事情时,那个对应的目录里却没有log.txt文件出现。
有没有人知道该怎么调试这个问题?谢谢!
3 个回答
-3
要调试一个不明的错误,你需要查看完整的错误堆栈信息。这可以帮助你找到问题的根源。通常,你还想检查每个堆栈的上下文变量,以便更好地理解发生了什么。虽然日志可以帮助你记录异常,但在生产服务器上调试时,这种方法效率很低。
Sentry 是一个非常好用的工具,可以帮助你跟踪和调试 Python 错误。它是开源的。在去年 Pycon 大会上,Django 的共同创始人 Jacobian 也提到过,这是 Django 开发中必备的工具之一。强烈推荐使用它。
0
好吧,这里有一个我用来记录日志的小配置。你还应该检查一下你的文件权限——www-user
是否被允许写入这个目录呢?!
settins.py
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt': "%d/%b/%Y %H:%M:%S"
},
},
'handlers': {
'null': {
'level': 'DEBUG',
'class': 'django.utils.log.NullHandler',
},
'logfile': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': BASE_DIR + "/logfile",
'maxBytes': 50000,
'backupCount': 2,
'formatter': 'standard',
},
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
},
'loggers': {
'django': {
'handlers': ['console'],
'propagate': True,
'level': 'WARN',
},
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False,
},
'': {
'handlers': ['console', 'logfile'],
'level': 'DEBUG',
},
}
}
something.py
import logging
try: # Python 2.7+
from logging import NullHandler
except ImportError:
class NullHandler(logging.Handler):
def emit(self, record):
pass
log = logging.getLogger(__name__)
log.addHandler(NullHandler())
def demo(foo):
if foo not bar:
log.debug('doh!')
return
1
你假设当前的工作目录是Django项目,但这不太可能,除非你在wsgi文件中专门进行了更改。
不过,你不应该把日志记录到一个单独的文件里。默认的日志设置会把日志记录到Apache自己的日志文件,通常是在/var/log目录下,或者在这个目录的某个子目录里。把你额外的配置去掉,让Django自己在那儿记录日志就可以了。