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

View File

@ -1,11 +1,17 @@
import uuid
import logging
from io import StringIO
from importlib import reload
import pytest
from unittest.mock import Mock
import sanic
from sanic.response import text
from sanic.log import LOGGING_CONFIG_DEFAULTS
from sanic import Sanic
from io import StringIO
import logging
logging_format = '''module: %(module)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]:
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