[PYTHON] Passen Sie die Flaschenzugriffsprotokolle an

Was du machen willst

Erstellen Sie das folgende Flask-Programm (Version 1.1.2)

from flask import Flask

app = Flask(__name__)


@app.route("/")
def hello():
    return "Hello World!"


if __name__ == "__main__":
    app.run(host='0.0.0.0')

Wenn ich es ausführe und darauf zugreife, wird das folgende Protokoll angezeigt:

127.0.0.1 - - [14/Apr/2020 19:13:43] "\x1b[37mGET / HTTP/1.1\x1b[0m" 200 -

Dieses Zugriffsprotokoll ist umständlich, da es (für mich) unnötige Zeichenfolgen enthält und die Textnachricht farbig ist.

Ich zeige Ihnen also, wie Sie dieses Protokoll anpassen können.

So passen Sie an

Zusammenfassend lässt sich sagen, dass der von Flask intern verwendete Logger mit dem Namen Werkzeug (Version 1.0.1) das obige Protokoll ausgibt. Holen Sie sich den Werkzeug-Logger wie folgt und passen Sie ihn an.

Beispiel 1) Ändern Sie die Protokollebene in ERROR

from flask import Flask
import logging

#Holen Sie sich Logger
werkzeug_logger = logging.getLogger("werkzeug")
#Level ändern
werkzeug_logger.setLevel(logging.ERROR)

app = Flask(__name__)


@app.route("/")
def hello():
    return "Hello World!"


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=4001)

Beispiel 2) Ändern Sie die Ausgabezeichenfolge

Standardmäßig wird es im Format "(IP-Adresse) --- (Datum und Uhrzeit)" ausgegeben. Im folgenden Beispiel wird der Teil von "(Nachricht)" jedoch ohne Farbe ausgegeben.

from flask import Flask
import logging
from werkzeug.serving import WSGIRequestHandler
from werkzeug.urls import uri_to_iri

werkzeug_logger = logging.getLogger("werkzeug")


def custom_log_request(self, code="-", size="-"):
    try:
        path = uri_to_iri(self.path)
        msg = "%s %s %s" % (self.command, path, self.request_version)
    except AttributeError:
        msg = self.requestline
    code = str(code)
    werkzeug_logger.info('"%s" %s %s' % (msg, code, size))


#Funktionsaustausch
WSGIRequestHandler.log_request = custom_log_request

app = Flask(__name__)


@app.route("/")
def hello():
    return "Hello World!"


if __name__ == "__main__":
    app.run(host='0.0.0.0')

Das Ausgabeprotokoll ist einfach und ohne Farbe (siehe unten)

"GET / HTTP/1.1" 200 -

Warum ist diese Methode gut?

Flask verwendet intern ein Paket namens werkzeug.

Daher gibt es in Flask zwei Logger. Einer ist der von Flask verwendete Logger, der mit logging.getLogger (" app.flask ") abgerufen werden kann. Der andere ist der von werkzeug verwendete Logger, der mit logging.getLogger (" werkzeug ") abgerufen werden kann.

Das obige Protokoll wird an der Stelle von ↓ im werkzeug Quellcode ausgegeben.

https://github.com/pallets/werkzeug/blob/1.0.x/src/werkzeug/serving.py#L406

Sie können es also anpassen, indem Sie diese Funktion ersetzen.

Dieses Protokoll verschwindet nicht, selbst wenn ich mit dem Logger von "app.flask" spiele, also bin ich wirklich begeistert (lacht)

Recommended Posts

Passen Sie die Flaschenzugriffsprotokolle an
Führen Sie Apache-Zugriffsprotokolle zusammen
Flasche
Flasche