diff --git a/sanic/__main__.py b/sanic/__main__.py index 594256f8..ebea4ce9 100644 --- a/sanic/__main__.py +++ b/sanic/__main__.py @@ -41,4 +41,4 @@ if __name__ == "__main__": " Example Module: project.sanic_server.app" .format(e.name)) except ValueError as e: - logger.error("{}".format(e)) + logger.exception("Failed to run app") diff --git a/sanic/handlers.py b/sanic/handlers.py index 81dd38d7..dbc7b42a 100644 --- a/sanic/handlers.py +++ b/sanic/handlers.py @@ -1,5 +1,5 @@ import sys -from traceback import format_exc, extract_tb +from traceback import extract_tb from sanic.exceptions import ( ContentRangeError, @@ -83,16 +83,16 @@ class ErrorHandler: if response is None: response = self.default(request, exception) except Exception: - self.log(format_exc()) - if self.debug: - url = getattr(request, 'url', 'unknown') - response_message = ('Exception raised in exception handler ' - '"%s" for uri: "%s"\n%s') - logger.error(response_message, - handler.__name__, url, format_exc()) + try: + url = repr(request.url) + except AttributeError: + url = "unknown" + response_message = ('Exception raised in exception handler ' + '"%s" for uri: %s') + logger.exception(response_message, handler.__name__, url) - return text(response_message % ( - handler.__name__, url, format_exc()), 500) + if self.debug: + return text(response_message % (handler.__name__, url), 500) else: return text('An error occurred while handling an error', 500) return response @@ -105,7 +105,14 @@ class ErrorHandler: getattr(logger, level)(message) def default(self, request, exception): - self.log(format_exc()) + try: + url = repr(request.url) + except AttributeError: + url = "unknown" + + response_message = ('Exception occurred while handling uri: %s') + logger.exception(response_message, url) + if issubclass(type(exception), SanicException): return text( 'Error: {}'.format(exception), @@ -115,9 +122,6 @@ class ErrorHandler: elif self.debug: html_output = self._render_traceback_html(exception, request) - response_message = ('Exception occurred while handling uri: ' - '"%s"\n%s') - logger.error(response_message, request.url, format_exc()) return html(html_output, status=500) else: return html(INTERNAL_SERVER_ERROR_HTML, status=500) diff --git a/sanic/server.py b/sanic/server.py index d5a8f211..2e1248d4 100644 --- a/sanic/server.py +++ b/sanic/server.py @@ -441,7 +441,7 @@ class HttpProtocol(asyncio.Protocol): logger.error("Transport closed @ %s and exception " "experienced during error handling", self.transport.get_extra_info('peername')) - logger.debug('Exception:\n%s', traceback.format_exc()) + logger.debug('Exception:', exc_info=True) else: exception = ServerError(message) self.write_error(exception) diff --git a/sanic/testing.py b/sanic/testing.py index 3a1d15c5..e9bf2b5d 100644 --- a/sanic/testing.py +++ b/sanic/testing.py @@ -1,4 +1,3 @@ -import traceback from json import JSONDecodeError from sanic.log import logger from sanic.exceptions import MethodNotSupported @@ -73,8 +72,7 @@ class SanicTestClient: **request_kwargs) results[-1] = response except Exception as e: - logger.error( - 'Exception:\n{}'.format(traceback.format_exc())) + logger.exception('Exception') exceptions.append(e) self.app.stop()