How do I customize Tornado's access logs How do I customize Tornado's access logs flask flask

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()