diff --git a/radicale/__init__.py b/radicale/__init__.py index 6578889..8fb4adc 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -39,6 +39,7 @@ import ssl import threading import wsgiref.simple_server import zlib +import datetime from http import client from urllib.parse import unquote, urlparse @@ -295,15 +296,32 @@ class Application: headers[key] = self.configuration.get("headers", key) # Start response + time_end = datetime.datetime.now() status = "%i %s" % ( status, client.responses.get(status, "Unknown")) - self.logger.debug("Answer status: %s", status) + self.logger.info("%s answer status for %s in %s sec: %s", environ["REQUEST_METHOD"], environ["PATH_INFO"] + depthinfo, (time_end - time_begin).total_seconds(), status) start_response(status, list(headers.items())) # Return response content return [answer] if answer else [] - self.logger.info("%s request at %s received", - environ["REQUEST_METHOD"], environ["PATH_INFO"]) + remote_host = "UNKNOWN" + if "REMOTE_HOST" in environ: + if environ["REMOTE_HOST"]: + remote_host = environ["REMOTE_HOST"] + if "HTTP_X_FORWARDED_FOR" in environ: + if environ["HTTP_X_FORWARDED_FOR"]: + remote_host = environ["HTTP_X_FORWARDED_FOR"] + remote_useragent = "[-no-user-agent-provided-]" + if "HTTP_USER_AGENT" in environ: + if environ["HTTP_USER_AGENT"]: + remote_useragent = environ["HTTP_USER_AGENT"] + depthinfo = "" + if "HTTP_DEPTH" in environ: + if environ["HTTP_DEPTH"]: + depthinfo = " with depth " + environ["HTTP_DEPTH"] + time_begin = datetime.datetime.now() + self.logger.info("%s request for %s received from %s using \"%s\"", + environ["REQUEST_METHOD"], environ["PATH_INFO"] + depthinfo, remote_host, remote_useragent) headers = pprint.pformat(self.headers_log(environ)) self.logger.debug("Request headers:\n%s", headers)