【问题标题】:Is there any way to make the Bottle servers less verbose?有什么办法可以让 Bottle 服务器不那么冗长吗?
【发布时间】:2012-07-28 02:10:57
【问题描述】:

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

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

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

瓶服务器启动(使用 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

【问题讨论】:

  • 如果你改用 mod_wsgi,apache 会拆分访问和错误日​​志。
  • 这是用于开发的——Apache 有点硬核。此外,Bottle 的重启器无法正常工作
  • 如果没有人有真正的解决方案,您可以将输出通过管道发送到grep -Ev '(GET|POST)'
  • 我在 Windows 上,但无论如何感谢您的命令 :-)
  • @jordanm:grep 以及许多其他有用的工具,也可以作为unxutils 的一部分在 Windows 上使用。

标签: python bottle


【解决方案1】:

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

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

然后当您启动瓶子时,将您的客户服务器适配器传递给它

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)

【讨论】:

    猜你喜欢
    • 2010-09-09
    • 2017-02-23
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 2022-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多