3

ボトル側に、 WSGIRefPasteなどのサーバーが受信したすべてのリクエストに対して行を出力しないようにするオプションはありますか?

注意:静かなオプションがあることは知っていますが、アプリケーション全体をサイレントにするのではなく、リクエストログだけをサイレントにする必要があります。

特にデバッグ情報を時々印刷したいので、混乱の中で迷子になってしまうことを考えると、非常にすぐに混乱します。これがシングルページロードの出力です。プロジェクトが少し大きくなると、おそらくもっと大きくなるでしょう。

ボトルサーバーの起動(WSGIRefServer()を使用)...
http://0.0.0.0:8080/で聞いています
Ctrl-Cを押して終了します。

localhost --- [28 / Jul / 2012 04:05:59] "GET / clients HTTP / 1.1" 200 3129
localhost --- [28 / Jul / 2012 04:05:59] "GET /static/css/main.css HTTP / 1.1" 304 0
localhost --- [28 / Jul / 2012 04:05:59] "GET /static/js/jquery-1.7.2.js HTTP / 1.1" 304 0
localhost --- [28 / Jul / 2012 04:05:59] "GET /static/js/jquery.cookie.js HTTP / 1.1" 304 0
localhost --- [28 / Jul / 2012 04:05:59] "GET /static/js/jquery.qtip.min.js HTTP / 1.1" 304 0
localhost --- [28 / Jul / 2012 04:05:59] "GET /static/js/showdown.js HTTP / 1.1" 304 0
localhost --- [28 / Jul / 2012 04:05:59] "GET /static/js/proj.js HTTP / 1.1" 304 0
localhost --- [28 / Jul / 2012 04:05:59] "GET /static/css/reset.css HTTP / 1.1" 304 0
localhost --- [28 / Jul / 2012 04:06:00] "GET /static/images/flag_gb.png HTTP / 1.1" 304 0
localhost --- [28 / Jul / 2012 04:06:00] "GET /static/images/flag_no.png HTTP / 1.1" 304 0
localhost --- [28 / Jul / 2012 04:06:00] "GET /static/images/icon_add.png HTTP / 1.1" 304 0
localhost --- [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 をオーバーライドしてから、関数に渡された応答コードに基づいてメッセージをフィルター処理する quiet 機能と同様です。

組み込みの 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)
于 2012-11-28T04:46:00.153 に答える