add request exception logging

This commit is contained in:
Pratik Vyas 2014-06-30 15:34:21 +05:30
parent 93425ca565
commit 2c3b170e17
2 changed files with 65 additions and 2 deletions

View file

@ -3,6 +3,7 @@
import sys, os
import json
import logging
from werkzeug.wrappers import Request, Response
from werkzeug.local import LocalManager
@ -19,12 +20,16 @@ import frappe.utils.response
import frappe.website.render
from frappe.utils import get_site_name
from frappe.middlewares import StaticDataMiddleware
from frappe.setup_logging import setup_logging
local_manager = LocalManager([frappe.local])
_site = None
_sites_path = os.environ.get("SITES_PATH", ".")
setup_logging()
logger = logging.getLogger(__name__)
@Request.application
def application(request):
frappe.local.request = request
@ -64,18 +69,23 @@ def application(request):
response = frappe.utils.response.handle_session_stopped()
except Exception, e:
http_status_code=getattr(e, "http_status_code", 500)
if frappe.local.is_ajax:
response = frappe.utils.response.report_error(getattr(e, "http_status_code", 500))
response = frappe.utils.response.report_error(http_status_code)
else:
frappe.respond_as_web_page("Server Error",
"<pre>"+frappe.get_traceback()+"</pre>",
http_status_code=getattr(e, "http_status_code", 500))
http_status_code=http_status_code)
response = frappe.website.render.render("message")
if e.__class__ == frappe.AuthenticationError:
if hasattr(frappe.local, "login_manager"):
frappe.local.login_manager.clear_cookies()
if http_status_code==500:
logger.error('Request Error')
else:
if frappe.local.request.method in ("POST", "PUT") and frappe.db:
frappe.db.commit()

53
frappe/setup_logging.py Normal file
View file

@ -0,0 +1,53 @@
import frappe
import logging
import logging.config
import os
import json
from pprint import pformat
class ContextFilter(logging.Filter):
"""
This is a filter which injects request information (if available) into the log.
"""
def filter(self, record):
record.form_dict = pformat(getattr(frappe.local, 'form_dict', None))
record.site = getattr(frappe.local, 'site', None)
record.tb = frappe.utils.get_traceback()
return True
def setup_logging():
conf = frappe.get_site_config(sites_path=os.environ.get('SITES_PATH', '.'))
if conf.logging_conf:
logging_conf = conf.logging_conf
else:
logging_conf = {
"version": 1,
"disable_existing_loggers": True,
"filters": {
"context_filter": {
"()": "frappe.loggers.ContextFilter"
}
},
"formatters": {
"site_wise": {
"format": "%(asctime)s %(message)s \n site: %(site)s\n form: %(form_dict)s\n\n%(tb)s\n--------------"
}
},
"loggers": {
"frappe.app": {
"level": "INFO",
"propagate": False,
"filters": ["context_filter"],
"handlers": ["request_exception"]
}
},
"handlers": {
"request_exception": {
"level": "ERROR",
"formatter": "site_wise",
"class": "logging.StreamHandler",
}
}
}
logging.config.dictConfig(logging_conf)