diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py
index e6a34561c1..d8d0df7e41 100755
--- a/synapse/app/homeserver.py
+++ b/synapse/app/homeserver.py
@@ -35,6 +35,7 @@ from twisted.enterprise import adbapi
from twisted.web.resource import Resource
from twisted.web.static import File
from twisted.web.server import Site
+from twisted.web.http import proxiedLogFormatter, combinedLogFormatter
from synapse.http.server import JsonResource, RootRedirect
from synapse.rest.media.v0.content_repository import ContentRepoResource
from synapse.rest.media.v1.media_repository import MediaRepositoryResource
@@ -228,7 +229,11 @@ class SynapseHomeServer(HomeServer):
if not config.no_tls and config.bind_port is not None:
reactor.listenSSL(
config.bind_port,
- Site(self.root_resource),
+ SynapseSite(
+ "synapse.access.https",
+ config,
+ self.root_resource,
+ ),
self.tls_context_factory,
interface=config.bind_host
)
@@ -237,7 +242,11 @@ class SynapseHomeServer(HomeServer):
if config.unsecure_port is not None:
reactor.listenTCP(
config.unsecure_port,
- Site(self.root_resource),
+ SynapseSite(
+ "synapse.access.http",
+ config,
+ self.root_resource,
+ ),
interface=config.bind_host
)
logger.info("Synapse now listening on port %d", config.unsecure_port)
@@ -245,7 +254,13 @@ class SynapseHomeServer(HomeServer):
metrics_resource = self.get_resource_for_metrics()
if metrics_resource and config.metrics_port is not None:
reactor.listenTCP(
- config.metrics_port, Site(metrics_resource), interface="127.0.0.1",
+ config.metrics_port,
+ SynapseSite(
+ "synapse.access.metrics",
+ config,
+ metrics_resource,
+ ),
+ interface="127.0.0.1",
)
logger.info("Metrics now running on 127.0.0.1 port %d", config.metrics_port)
@@ -462,6 +477,24 @@ class SynapseService(service.Service):
return self._port.stopListening()
+class SynapseSite(Site):
+ """
+ Subclass of a twisted http Site that does access logging with python's
+ standard logging
+ """
+ def __init__(self, logger_name, config, resource, *args, **kwargs):
+ Site.__init__(self, resource, *args, **kwargs)
+ if config.captcha_ip_origin_is_x_forwarded:
+ self._log_formatter = proxiedLogFormatter
+ else:
+ self._log_formatter = combinedLogFormatter
+ self.access_logger = logging.getLogger(logger_name)
+
+ def log(self, request):
+ line = self._log_formatter(self._logDateTime, request)
+ self.access_logger.info(line)
+
+
def run(hs):
def in_thread():
|