Exemplo n.º 1
0
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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
def server_error(request, template='500.html'):
    return default_server_error(request, template=template)
Exemplo n.º 11
0
def server_error(request, template='500.html'):
    return default_server_error(request, template=template)
Exemplo n.º 12
0
def server_error(request, template_name='learning_logs/500.html'):
    return default_server_error(request, template_name=template_name)