控制wsgiref simple_server日志

gib*_*nic 8 python wsgiref python-2.7

我正在玩弄wsgiref.simple_server研究Web服务器的世界.
我想控制生成的日志,但在Python的文档中找不到任何关于它的内容.

我的代码看起来像这样:

from wsgiref.simple_server import make_server

def application(environ, start_response):
  start_response('200 OK', headers)
  return ['Hello World']

httpd = make_server('', 8000, application)
httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)

Tuu*_*nen 19

wsgiref.simple_server.make_server默认情况下,创建一个WSGIServer具有WSGIRequestHandler:

def make_server(
    host, port, app, server_class=WSGIServer, handler_class=WSGIRequestHandler):
    """Create a new WSGI server listening on `host` and `port` for `app`"""
    server = server_class((host, port), handler_class)
    server.set_app(app)
    return server
Run Code Online (Sandbox Code Playgroud)

WSGIRequestHandler这里延伸BaseHTTPServer.BaseHTTPRequestHandler,其中伐木魔法证明是:

def log_message(self, format, *args):
    sys.stderr.write("%s - - [%s] %s\n" %
                     (self.client_address[0],
                      self.log_date_time_string(),
                      format%args))
Run Code Online (Sandbox Code Playgroud)

所以它实际上是登录到stderr,而不是python日志模块.您可以在自己的处理程序中覆盖它:

class NoLoggingWSGIRequestHandler(WSGIRequestHandler):

    def log_message(self, format, *args):
        pass
Run Code Online (Sandbox Code Playgroud)

并将您的自定义处理程序传递给服务器:

httpd = make_server('', 8000, application, handler_class=NoLoggingWSGIRequestHandler)
Run Code Online (Sandbox Code Playgroud)