3

Bottle 方面是否有任何选项可以防止像WSGIRefPaste这样的服务器为收到的每个请求输出一行?

注意:我知道有一个安静的选项,但我不希望整个应用程序保持沉默,只是请求日志。

它很快就会变得非常混乱,特别是考虑到我想不时打印调试信息并且它只是在混乱中迷失了。这是单个页面加载的输出,当我的项目增长一点时,它可能会变得更大:

瓶服务器启动(使用 WSGIRefServer())...
收听 http://0.0.0.0:8080/
按 Ctrl-C 退出。

本地主机 - - [28/Jul/2012 04:05:59] “GET /clients HTTP/1.1”200 3129
本地主机 - - [28/Jul/2012 04:05:59] “GET /static/css/main.css HTTP/1.1”304 0
本地主机 - - [28/Jul/2012 04:05:59] “GET /static/js/jquery-1.7.2.js HTTP/1.1”304 0
本地主机 - - [28/Jul/2012 04:05:59] “GET /static/js/jquery.cookie.js HTTP/1.1”304 0
本地主机 - - [28/Jul/2012 04:05:59] “GET /static/js/jquery.qtip.min.js HTTP/1.1”304 0
本地主机 - - [28/Jul/2012 04:05:59] “GET /static/js/showdown.js HTTP/1.1”304 0
本地主机 - - [28/Jul/2012 04:05:59] “GET /static/js/proj.js HTTP/1.1”304 0
本地主机 - - [28/Jul/2012 04:05:59] “GET /static/css/reset.css HTTP/1.1”304 0
本地主机 - - [28/Jul/2012 04:06:00] “GET /static/images/flag_gb.png HTTP/1.1”304 0
本地主机 - - [28/Jul/2012 04:06:00] “GET /static/images/flag_no.png HTTP/1.1”304 0
本地主机 - - [28/Jul/2012 04:06:00] “GET /static/images/icon_add.png HTTP/1.1”304 0
本地主机 - - [28/Jul/2012 04:06:00] “GET /favicon.ico HTTP/1.1”404 742
4

1 回答 1

1

我过去做过类似的事情。对于不同类型的服务器,您可以覆盖日志处理程序以过滤掉您不想要的日志。我从 Bottle 复制了代码并制作了自己的 ServerAdapter,下面是 WSGI 服务器的代码。类似于我自己的处理程序类覆盖 log_request 函数并覆盖原始 log_request 然后根据传递给函数的响应代码过滤掉消息的安静功能。

我从内置的 BaseHTTPServer 模块中复制了 log_request 函数并添加了 if 语句。

然后当你启动瓶子时,将它传递给你的客户 serverAdapter

from bottle import route, run, template
import bottle

@route('/hello/:name')
def index(name='World'):
    print "Debug Print Statement"
    return template('<b>Hello {{name}}</b>!', name=name)

class WSGIRefServer(bottle.ServerAdapter):
    def run(self, handler): # pragma: no cover
        from wsgiref.simple_server import make_server, WSGIRequestHandler

        class LogHandler(WSGIRequestHandler):
            def log_request(self, code='-', size='-'):
                """Log an accepted request.

                This is called by send_response().

                """
                if code not in  ["200", "304"]:
                    self.log_message('"%s" %s %s',
                                     self.requestline, str(code), str(size))

        self.options['handler_class'] = LogHandler
        srv = make_server(self.host, self.port, handler, **self.options)
        srv.serve_forever()


run(host='localhost', server=WSGIRefServer, port=8080)
于 2012-11-28T04:46:00.153 回答