簡體   English   中英

控制 wsgiref simple_server 日志

[英]Control wsgiref simple_server log

我正在使用wsgiref.simple_server來研究網絡服務器的世界。
我想控制生成的日志,但在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()

wsgiref.simple_server.make_server默認使用WSGIRequestHandler創建一個WSGIServer

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

這里的WSGIRequestHandlerBaseHTTPServer.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))

因此,它實際上是記錄到 stderr,而不是記錄到 python 日志記錄模塊。 您可以在自己的處理程序中覆蓋它:

class NoLoggingWSGIRequestHandler(WSGIRequestHandler):

    def log_message(self, format, *args):
        pass

並將您的自定義處理程序傳遞給服務器:

httpd = make_server('', 8000, application, handler_class=NoLoggingWSGIRequestHandler)

另一個奇怪的技巧是使用redirect_stderr

import os
from contextlib import redirect_stderr


with redirect_stderr(open(os.devnull, "w")):
    with make_server("", 8051, app) as httpd:
        httpd.handle_request()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM