我正在玩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()发布于 2015-08-09 13:16:53
默认情况下,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这里的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))实际上,这是对stderr的日志记录,而不是python日志模块。您可以在自己的处理程序中重写此操作:
class NoLoggingWSGIRequestHandler(WSGIRequestHandler):
def log_message(self, format, *args):
pass并将您的自定义处理程序传递给服务器:
httpd = make_server('', 8000, application, handler_class=NoLoggingWSGIRequestHandler)发布于 2020-08-14 13:09:14
另一个奇怪的窍门是使用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()https://stackoverflow.com/questions/31433682
复制相似问题