[PYTHON] Personnaliser les journaux d'accès Flask

Chose que tu veux faire

Créez le programme Flask (version 1.1.2) suivant

from flask import Flask

app = Flask(__name__)


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


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

Lorsque je l'exécute et y accède, le journal suivant apparaît,

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

Ce journal d'accès est gênant car il contient des chaînes inutiles (pour moi) et le corps du message est coloré.

Je vais donc vous montrer comment personnaliser ce journal.

Comment personnaliser

En conclusion, l'enregistreur nommé Werkzeug (version 1.0.1) utilisé en interne par Flask génère le journal ci-dessus, alors procurez-vous l'enregistreur Werkzeug et personnalisez-le comme suit.

Exemple 1) Changez le niveau de journalisation en ERREUR

from flask import Flask
import logging

#Obtenez un enregistreur
werkzeug_logger = logging.getLogger("werkzeug")
#Changer de niveau
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)

Exemple 2) Modifier la chaîne de caractères de sortie

Par défaut, il est émis au format (adresse IP) --- [(date et heure)](message (coloré)), mais dans l'exemple suivant, la partie (message) est sortie sans couleur.

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))


#Remplacement de fonction
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')

Le journal de sortie est simple sans couleur comme indiqué ci-dessous

"GET / HTTP/1.1" 200 -

Pourquoi cette méthode est-elle bonne?

Flask utilise un package appelé werkzeug en interne.

Par conséquent, il existe deux enregistreurs dans Flask. L'un est le logger utilisé par Flask, qui peut être obtenu avec logging.getLogger (" app.flask "). L'autre est l'enregistreur utilisé par werkzeug, qui peut être obtenu avec logging.getLogger (" werkzeug ").

Le journal ci-dessus est sorti à l'emplacement de ↓ dans le code source de werkzeug.

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

Vous pouvez donc le personnaliser en remplaçant cette fonction.

Même si j'ai joué avec le logger de ʻapp.flask`, ce journal ne disparaît pas, donc j'étais vraiment dedans (rires)

Recommended Posts

Personnaliser les journaux d'accès Flask
Fusionner les journaux d'accès Apache
ballon
ballon