diff -r bfa6bee1a9e0 trytond/protocols/jsonrpc.py --- a/trytond/trytond/protocols/jsonrpc.py Mon Oct 20 14:30:02 2014 +0200 +++ b/trytond/trytond/protocols/jsonrpc.py Mon Nov 03 13:32:30 2014 +0100 @@ -27,6 +27,7 @@ import json import base64 import encodings +import logging try: from cStringIO import StringIO except ImportError: @@ -136,7 +137,14 @@ existing method through subclassing is the prefered means of changing method dispatch behavior. """ - rawreq = json.loads(data, object_hook=JSONDecoder()) + try: + rawreq = json.loads(data, object_hook=JSONDecoder()) + except: + exc_type, exc_value = sys.exc_info()[:2] + logging.getLogger('jsonrpc').warning( + 'Exception in JSONRPC dispatcher: %s (%s)\n %s' + % (exc_value, exc_type, traceback.format_exc())) + raise req_id = rawreq.get('id', 0) method = rawreq['method'] @@ -152,11 +160,18 @@ response['result'] = self._dispatch(method, params) except (UserError, UserWarning, NotLogged, ConcurrencyException), exception: + logging.getLogger('jsonrpc').warning('User Error: %s (%s)' + % (method, params)) + traceback.print_exc() response['error'] = exception.args except Exception: + exc_type, exc_value = sys.exc_info()[:2] tb_s = ''.join(traceback.format_exception(*sys.exc_info())) for path in sys.path: tb_s = tb_s.replace(path, '') + logging.getLogger('jsonrpc').warning( + 'Exception in JSONRPC response generation: %s (%s)\n %s' + % (exc_value, exc_type, tb_s)) # report exception back to server response['error'] = (str(sys.exc_value), tb_s)