Merge pull request #965 from samael500/master

fix issue #959
This commit is contained in:
Raphael Deem 2017-10-13 14:58:46 -07:00 committed by GitHub
commit a0d8418b40
2 changed files with 47 additions and 8 deletions

View File

@ -342,8 +342,10 @@ class HttpProtocol(asyncio.Protocol):
self.url, type(response)) self.url, type(response))
self.write_error(ServerError('Invalid response type')) self.write_error(ServerError('Invalid response type'))
except RuntimeError: except RuntimeError:
logger.error('Connection lost before response written @ %s', if self._debug:
self.request.ip) logger.error('Connection lost before response written @ %s',
self.request.ip)
keep_alive = False
except Exception as e: except Exception as e:
self.bail_out( self.bail_out(
"Writing response failed, connection closed {}".format( "Writing response failed, connection closed {}".format(
@ -379,8 +381,10 @@ class HttpProtocol(asyncio.Protocol):
self.url, type(response)) self.url, type(response))
self.write_error(ServerError('Invalid response type')) self.write_error(ServerError('Invalid response type'))
except RuntimeError: except RuntimeError:
logger.error('Connection lost before response written @ %s', if self._debug:
self.request.ip) logger.error('Connection lost before response written @ %s',
self.request.ip)
keep_alive = False
except Exception as e: except Exception as e:
self.bail_out( self.bail_out(
"Writing response failed, connection closed {}".format( "Writing response failed, connection closed {}".format(
@ -407,8 +411,9 @@ class HttpProtocol(asyncio.Protocol):
version = self.request.version if self.request else '1.1' version = self.request.version if self.request else '1.1'
self.transport.write(response.output(version)) self.transport.write(response.output(version))
except RuntimeError: except RuntimeError:
logger.error('Connection lost before error written @ %s', if self._debug:
self.request.ip if self.request else 'Unknown') logger.error('Connection lost before error written @ %s',
self.request.ip if self.request else 'Unknown')
except Exception as e: except Exception as e:
self.bail_out( self.bail_out(
"Writing error failed, connection closed {}".format( "Writing error failed, connection closed {}".format(

View File

@ -1,11 +1,17 @@
import uuid import uuid
import logging
from io import StringIO
from importlib import reload from importlib import reload
import pytest
from unittest.mock import Mock
import sanic
from sanic.response import text from sanic.response import text
from sanic.log import LOGGING_CONFIG_DEFAULTS from sanic.log import LOGGING_CONFIG_DEFAULTS
from sanic import Sanic from sanic import Sanic
from io import StringIO
import logging
logging_format = '''module: %(module)s; \ logging_format = '''module: %(module)s; \
function: %(funcName)s(); \ function: %(funcName)s(); \
@ -71,3 +77,31 @@ def test_logging_pass_customer_logconfig():
for fmt in [h.formatter for h in logging.getLogger('sanic.access').handlers]: for fmt in [h.formatter for h in logging.getLogger('sanic.access').handlers]:
assert fmt._fmt == modified_config['formatters']['access']['format'] assert fmt._fmt == modified_config['formatters']['access']['format']
@pytest.mark.parametrize('debug', (True, False, ))
def test_log_connection_lost(debug, monkeypatch):
""" Should not log Connection lost exception on non debug """
app = Sanic('connection_lost')
stream = StringIO()
root = logging.getLogger('root')
root.addHandler(logging.StreamHandler(stream))
monkeypatch.setattr(sanic.server, 'logger', root)
@app.route('/conn_lost')
async def conn_lost(request):
response = text('Ok')
response.output = Mock(side_effect=RuntimeError)
return response
with pytest.raises(ValueError):
# catch ValueError: Exception during request
app.test_client.get('/conn_lost', debug=debug)
log = stream.getvalue()
if debug:
assert log.startswith(
'Connection lost before response written @')
else:
assert 'Connection lost before response written @' not in log