add request exception logging
This commit is contained in:
parent
93425ca565
commit
2c3b170e17
2 changed files with 65 additions and 2 deletions
|
|
@ -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
53
frappe/setup_logging.py
Normal 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)
|
||||
Loading…
Add table
Reference in a new issue