首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控件wsgiref simple_server日志

控件wsgiref simple_server日志
EN

Stack Overflow用户
提问于 2015-07-15 14:47:53
回答 2查看 2.5K关注 0票数 9

我正在玩wsgiref.simple_server来研究网络服务器的世界。

我想控制生成的日志,但是在Python文档中找不到任何关于它的信息。

我的代码如下所示:

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-09 13:16:53

默认情况下,wsgiref.simple_server.make_serverWSGIRequestHandler创建WSGIServer

代码语言:javascript
复制
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扩展而来的,在这里,日志记录的魔力是:

代码语言:javascript
复制
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日志模块。您可以在自己的处理程序中重写此操作:

代码语言:javascript
复制
class NoLoggingWSGIRequestHandler(WSGIRequestHandler):

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

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

代码语言:javascript
复制
httpd = make_server('', 8000, application, handler_class=NoLoggingWSGIRequestHandler)
票数 23
EN

Stack Overflow用户

发布于 2020-08-14 13:09:14

另一个奇怪的窍门是使用redirect_stderr

代码语言:javascript
复制
import os
from contextlib import redirect_stderr


with redirect_stderr(open(os.devnull, "w")):
    with make_server("", 8051, app) as httpd:
        httpd.handle_request()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31433682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档