我正在使用urlib来点击我的应用而不是浏览器,所以当发生错误时我看不到调试屏幕.将正常调试信息发送到控制台或文件的最佳方法是什么?
编辑:我已经抓住了页面的输出,但当我将它打印到屏幕上时,它充满了大量无用的HTML.我可以得到错误吗?
Yuj*_*ita 29
这篇文章仍然受到欢迎.
我建议使用以下使用内置日志记录系统的方法之一.
以管理电子邮件处理程序管道异常的方式相同,您可以将数据发送到控制台记录器,文件记录器或其他任何地方(单独或除了电子邮件处理程序之外).
好吧,最简单的方法是将调试模式设置为OFF,让django通过电子邮件向您发送错误,因为这需要5秒钟:http: //docs.djangoproject.com/en/dev/howto/error-reporting/
否则,我会编写一个记录异常的中间件,但如果你想要堆栈跟踪,那就更难了.这是文档.
import traceback
import sys
from __future__ import print_function
class ProcessExceptionMiddleware(object):
def process_exception(self, request, exception):
# Just print the exception object to stdout
print(exception)
# Print the familiar Python-style traceback to stderr
traceback.print_exc()
# Write the traceback to a file or similar
myfile.write(''.join(traceback.format_exception(*sys.exc_info())))
Run Code Online (Sandbox Code Playgroud)
Set*_*eth 14
如果您在本地运行开发服务器,则可以使用print.
此外,您可以使用logging模块并将输出重定向到stdout.在settings.py这样的东西:
import logging.config
logging.config.fileConfig('/path/to/logging.conf')
Run Code Online (Sandbox Code Playgroud)
然后创建一个logging.conf文件:
[loggers]
keys=root
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
Run Code Online (Sandbox Code Playgroud)
查看python文档以获取更多详细信息和更多示例.
Ada*_*ing 13
执行此操作的最佳方法是为其设置日志记录处理程序django.requests.您可以通过将LOGGING设置添加到settings.py文件来完成此操作.下面是一个例子:
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
},
'handlers': {
'console': {
'level': 'NOTSET',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
}
},
'loggers': {
'': {
'handlers': ['console'],
'level': 'NOTSET',
},
'django.request': {
'handlers': ['console'],
'propagate': False,
'level': 'ERROR'
}
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个,每次返回500响应时,您都会在终端中看到一个很好的堆栈跟踪.
有关Django实现Python记录器的更多信息,请参阅有关记录的文档.
我得到500内部服务器错误,无法调试它,因为代码没有通过浏览器访问,终端没有显示回溯.中间件中的这段代码完全不同:
import traceback
import sys
class ProcessExceptionMiddleware(object):
def process_response(self, request, response):
if response.status_code != 200:
print '\n'.join(traceback.format_exception(*sys.exc_info()))
return response
Run Code Online (Sandbox Code Playgroud)
我没有处理异常I,而是处理响应对象并在状态代码不是200时打印回溯,现在我可以看到导致错误的原因.在这种特殊情况下,这是一个不正确的缩进块.
| 归档时间: |
|
| 查看次数: |
68423 次 |
| 最近记录: |