How do I customize Tornado's access logs
I'd override the WSGIContainer's log function:
from tornado.log import access_logfrom tornado.wsgi import WSGIContainerclass MyWSGI(WSGIContainer): def _log(self, status_code, request): if status_code < 400: log_method = access_log.info elif status_code < 500: log_method = access_log.warning else: log_method = access_log.error request_time = 1000.0 * request.request_time() log_method( "status_code=%s method=%s URL=%s ip=%s duration=%.2fms", status_code, request.method, request.uri, request.remote_ip, request_time)
Then use MyWSGI in place of WSGIContainer.
You can use wsgi-request-logger to do this no matter which WSGI server you use:
def log_formatter(status_code, environ, content_length, *, rt_us=None, **kwargs): rt_ms = rt_us / 1000.0 return "status_code={status_code} method={environ[REQUEST_METHOD]} path=environ[PATH_INFO] ip={environ[REMOTE_ADDR]} duration={rt_ms}ms".format(**locals())def run_app(): logging_app = WSGILogger(app, [], log_formatter) import tornado.log tornado.log.access_log.addFilter(lambda record: False) http_server = HTTPServer(WSGIContainer(logging_app)) http_server.listen(port=9000) IOLoop.instance().start()