def page_server_error(request, *args, **kw): # Write error info in /var/log/httpd/error_log import traceback # print(traceback.format_exc()) # Logging, using logger. logger.error('\n'.join([ f'Server Error happened!', f'Request uri: {request.build_absolute_uri()}', f'HTTP_HOST: {request.META["HTTP_HOST"] if "HTTP_HOST" in request.META else "None"}', f'HTTP_REFERER: {request.META["HTTP_REFERER"] if "HTTP_REFERER" in request.META else "None"}', f'HTTP_USER_AGENT: {request.META["HTTP_USER_AGENT"] if "HTTP_USER_AGENT" in request.META else "None"}', f'QUERY_STRING: {request.META["QUERY_STRING"] if "QUERY_STRING" in request.META else "None"}', f'REMOTE_ADDR: {request.META["REMOTE_ADDR"] if "REMOTE_ADDR" in request.META else "None"}', f'REQUEST_METHOD: {request.META["REQUEST_METHOD"] if "REQUEST_METHOD" in request.META else "None"}', ])) # ]), exc_info=True) # NOTE: Want to log stacktrace manually with exc_info. But 'return default_server_error' automatically log it. # Send error info to Slack and display django default 500 page. # When send to Slack, output a line where the error occurs in order to make it easier to read. common.send_slack_notification('\n'.join([ f'[{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}] Server Error happened!', f'Request uri: {request.build_absolute_uri()}', f'HTTP_REFERER: {request.META["HTTP_REFERER"] if "HTTP_REFERER" in request.META else "None"}', f'HTTP_USER_AGENT: {request.META["HTTP_USER_AGENT"] if "HTTP_USER_AGENT" in request.META else "None"}', traceback.format_exc(limit=-1), '\n', ])) # Default server error. It automatically logs stacktrace. return default_server_error(request, *args, **kw)
def inner(request, *args, **kw): try: try: user = request.user.username except: user = '******' msg = u"From:[%s], Source:[%s.%s], LoginUser:[%s], Method:[%s], URI:[%s], UserAgent:[%s]" % (request.META['REMOTE_ADDR'], f.__module__, f.__name__, user, request.method, request.get_full_path(), request.META['HTTP_USER_AGENT']) qd = None if request.method == 'POST': qd = request.POST elif request.method == 'GET': qd = request.GET else: qd = request.REQUEST # パラメータの内容を出力 for key, values in qd.lists(): msg = msg + ", params[" + key + "]:" for value in values: msg = msg + "[" + value + "]" # ファイルアップロードの場合はファイル名を出力 if len(request.FILES) > 0: for key, values in request.FILES.lists(): msg = msg + ", files[" + key + "]:" for value in values: msg = msg + "[" + value.name + "]" logger.debug(msg.replace("\r\n", "")) return f(request, *args, **kw) except Exception, (e): logger.error(e) return default_server_error(request, *args, **kw)
def server_error(request, template_name='500.html'): import traceback import datetime logger = logging.getLogger('django.internal.error') logger.debug(datetime.datetime.now()) logger.debug(traceback.format_exc()) return default_server_error(request, template_name)
def server_error(request, *args, **kw): """ djangoのディフォルトエラーハンドラー django.conf.urls.defaults.server_error の代わりに500エラーを処理する。DEBUG==Falseの場合のみ。 詳細をログに書き、ブラウザへの返答はジャンゴに任せる。 使い方: 以下のコードをurls.pyなどに入れる。 handler500='ext.exception_logger.server_error' DEBUG=Falseの時のデバッグ手段 http://d.hatena.ne.jp/karasuyamatengu/20100521/1274399876 """ # 開発モードでブラウザに送られるリスポンスオブジェクトを作る。 from django.views import debug exc_info = sys.exc_info() rsp=debug.technical_500_response(request, *exc_info) # ログファイル名: path-to-view.timestamp.html dumpfile='.'.join([request.path_info.lstrip('/').rstrip('/').replace('/','-'), str(int(mktime(datetime.now().timetuple()))), 'html']) dumppath=os.path.join(BASE_DIR, dumpfile) # リスポンスからHTMLを取り出してログファイルに出力。 #open(dumppath,'w').write(rsp.content) open(dumppath,'w').write(str(rsp.content)) # ブラウザへの返答はジャンゴに任せる。(500.htmlテンプレートでページを作って返す) return default_server_error(request, *args, **kw)
def server_error(request, *args, **kwargs): """JSON aware server 500 error response. As we don't want to return html response for a json request. """ if not settings.DEBUG and request.META.get('CONTENT_TYPE', None) == 'application/json': exc_type, exc_obj, exc_tb = sys.exc_info() response_dict = { 'error_type': exc_type.__name__ if exc_type else 'ServerError', 'errors': [{'message': 'Server application error', }] } return http.JsonResponse(data=response_dict, status=500) return default_server_error(request, *args, **kwargs)
def server_error(request, *args, **kwargs): """JSON aware server 500 error response. As we don't want to return html response for a json request. """ if ( not settings.DEBUG and request.META.get("CONTENT_TYPE", None) == "application/json" ): exc_type, exc_obj, exc_tb = sys.exc_info() response_dict = { "error_type": exc_type.__name__ if exc_type else "ServerError", "errors": [{"message": "Server application error"}], } return http.JsonResponse(data=response_dict, status=500) return default_server_error(request, *args, **kwargs)
def server_error(request, *args, **kwargs): """ JSON aware server 500 error response. Don't return html for a json type request. """ exc_type, exc_obj, exc_tb = sys.exc_info() if not settings.DEBUG and request.META.get('CONTENT_TYPE', None) == "application/json": response_dict = { "_error_message": "Server application error", } if exc_type: response_dict['_error_type'] = "{0}.{1}".format(exc_type.__module__, exc_type.__name__) return http.JsonResponse(data=response_dict, status=500) return default_server_error(request, *args, **kwargs)
def page_server_error(request, *args, **kw): # Write error info in /var/log/httpd/error_log import traceback # print(traceback.format_exc()) # Send error info to Slack and display django default 500 page. common.send_slack_notification('\n'.join([ 'Server Error happened!', f'Request uri: {request.build_absolute_uri()}', f'HTTP_HOST: {request.META["HTTP_HOST"] if "HTTP_HOST" in request.META else "None"}', f'HTTP_REFERER: {request.META["HTTP_REFERER"] if "HTTP_REFERER" in request.META else "None"}', f'HTTP_USER_AGENT: {request.META["HTTP_USER_AGENT"] if "HTTP_USER_AGENT" in request.META else "None"}', f'QUERY_STRING: {request.META["QUERY_STRING"] if "QUERY_STRING" in request.META else "None"}', f'REMOTE_ADDR: {request.META["REMOTE_ADDR"] if "REMOTE_ADDR" in request.META else "None"}', f'REQUEST_METHOD: {request.META["REQUEST_METHOD"] if "REQUEST_METHOD" in request.META else "None"}', f'', traceback.format_exc(), ])) return default_server_error(request, *args, **kw)
def server_error(request, template='500.html'): return default_server_error(request, template=template)
def server_error(request, template_name='learning_logs/500.html'): return default_server_error(request, template_name=template_name)