Mic*_*ael 11 django django-templates django-middleware django-views django-errors
我想用它在我的自定义中间件类的process_exception()方法中生成html日志文件,例如:
我知道Django能够为这些异常发送电子邮件,但我宁愿不使用它.我正在使用JSON开发一个RESTful应用程序,所以返回一个json字符串表示错误500然后将html放在其他地方感觉更合适.
提前致谢.
对不起,也许我需要澄清一下:我不想创建自己的500.html,我想使用当Debug = True时django使用的那个.即生成错误文件并将其放在日志文件夹中.
感谢Mark的帮助 - 这是我对任何感兴趣的人的解决方案:
import logging
import os
import settings
import sys
import datetime
from response import get_json_response
from django.views.debug import ExceptionReporter
logging.config.dictConfig(settings.LOGGING)
LOGGER = logging.getLogger('console_logger')
class LoggingMiddleware(object):
def process_exception(self,request,exception):
exc_type, exc_value, exc_traceback = sys.exc_info()
er = ExceptionReporter(request, exc_type, exc_value, exc_traceback)
time = str(datetime.datetime.now())
file_path = os.path.join(settings.LOG_FOLDER, "{}.html".format(time))
LOGGER.error("Writing error 500 traceback to %s" % file_path)
file_handle = open(file_path,'w')
file_handle.write(er.get_traceback_html())
file_handle.close()
return get_json_response(500,"HTTP Error 500: Internal Server Error")
Run Code Online (Sandbox Code Playgroud)
代码拦截任何异常,使用sys模块和djangos默认错误模板生成格式良好的回溯/异常信息页面,然后在返回JSON对象之前将其放在日志文件夹中,表明存在http错误500.
500回溯页面使用TECHNICAL_500_TEMPLATE硬编码的模板字符串()django.views.debug.该报告由一个ExceptionReporter类生成,该类还包含在django.views.debug其中,您应该能够为自己的日志生成重新定位.
小智 5
如果我们想显示在您的模板 ( ) 中生成的异常,500.html那么我们可以编写您自己的 500 视图,捕获异常并将其传递给您的 500 模板。
import sys
import traceback
from django.http.response import HttpResponseServerError
from django.template import loader
from django.template.context import Context, RequestContext
def custom_500(request):
t = loader.get_template('500.html')
type, value, tb = sys.exc_info()
return HttpResponseServerError(
t.render(
Context({
'exception_value': value,
'value': type,
'tb': traceback.format_exception(type, value, tb)
}, RequestContext(request))
)
)
Run Code Online (Sandbox Code Playgroud)
from django.conf.urls.defaults import *
handler500 = 'my_app.views.custom_500'
Run Code Online (Sandbox Code Playgroud)
{{ exception_value }}{{value}}{{tb}}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请访问:https://docs.djangoproject.com/en/dev/topics/http/views/#the-500-server-error-view
| 归档时间: |
|
| 查看次数: |
1795 次 |
| 最近记录: |