我已经在Apache上部署了我的django站点,这是我的开发机器上没有出现的问题,因此我想打印一些变量以查看发生了什么。
我尝试使用python日志记录模块,我这样做了:
import os, logging
FILE = os.getcwd()
logging.basicConfig(filename=os.path.join(FILE,'log.txt'),level=logging.DEBUG)
logging.debug('Write')
在我的开发机器上,可能会有一个log.txt显示在我的django项目的根目录中。但是,当我做同样的事情时,我的服务器上的相应目录中没有显示log.txt文件。
有谁知道如何调试它?谢谢!
答案 0 :(得分:0)
嗯,这是我用于记录的一个小配置。您还应检查文件权限 - 允许www-user
写入目录吗?!
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',
},
}
}
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 :(得分:0)
您假设当前的工作目录是Django项目,但除非您在wsgi文件中专门更改它,否则情况不太可能。
但是,您不应该记录到单独的文件。默认日志记录设置将记录到Apache自己的/ var / log登录或其子目录中特定于站点的日志。删除你的额外配置,让Django登录。
答案 2 :(得分:-2)
您需要一个完整的堆栈跟踪来调试Web应用程序的未知异常。通常,您还需要检查每个堆栈的上下文变量以查找根本原因。日志可以帮助您统计异常,但在生产服务器上进行调试效率很低。
Sentry为跟踪和调试python错误提供了一个非常好的UI。它是开源的。它是jacobian(Django Co-Creator)去年Pycon谈话必备的django软件包之一。使用它。