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