Im ersten Beitrag zu Flask haben wir ein einfaches „Hello World!“ im Browser dargestellt. Jedoch kann es manchmal vorkommen das wir einpaar debug Ausgaben erzeugen möchten. Hier empfiehlt es sich ein Logging zu implementieren. Diese Logausgaben können wir entweder in die Konsole umleiten oder wahlweise in eine Datei.
Der Vorteil vom Logging ist auch, dass wir Fehlermeldungen speichern können und somit das Reproduzieren von Fehlern im Produktivsystem erleichtert wird.
Stufen eines Logging
Wir können nicht nur „irgendwas“ loggen sondern wir können zusätzlich festlegen wie schwer diese Information wiegt. D.h. ob es nur eine Information, eine Warnung oder sogar ein Fehler ist. Zusätzlich können wir auch festlegen ob die Ausgabe zum debuggen dient und somit im Produktiven Einsatz unterdrückt werden soll.
einrichten des Logging in Flask
Damit wir in unserem Programm etwas loggen können müssen wir das Modul „logging“ importieren.
import logging
Zusätzlich müssen wir das LogLevel definieren.
logging.basicConfig(level=logging.INFO)
# logging.INFO # logging.DEBUG # logging.CRITICAL # logging.ERROR # logging.FATAL
Um nun eine Logausgabe auf der Konsole zu erzeugen müssen wir in unserem „app“ Objekt die Klasse „logger“ mit der jeweiligen Funktion für das LogLevel aufrufen.
Wenn wir also eine Information ausgeben möchten das die Funktion „start“ aufgerufen wurde, dann schreiben wir:
app.logger.info("Funktion start aufgerufen!")
Fügen wir nun dem bereits bekannten Programm „Hello World!“ das Logging hinzu und starten die FLASK_APP.
from flask import Flask import logging app = Flask(__name__) logging.basicConfig(level=logging.INFO) @app.route('/') def start(): app.logger.info("Funktion start aufgerufen!") return "Hello World!"
Auf der Konsole sieht dieses dann wie folgt aus:
C:\Projekt\python\HelloFlask>flask run * Serving Flask app "Main.py" * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off INFO:werkzeug: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) INFO:Main:Funktion start aufgerufen! INFO:werkzeug:127.0.0.1 - - [25/Feb/2021 20:37:37] "GET / HTTP/1.1" 200 -
Wir sehen nun vor der Ausgabe das die Seite „/“ aufgerufen wurde dass, die Ausgabe „INFO:Main:Funktion start aufgerufen!“ ausgegeben wird.
Umleiten der Logausgaben in eine Datei
Um nun die Logausgaben in eine Datei umzuleiten müssen wir bei der Konfiguration des Loglevels einen Dateinamen eingeben.
logging.basicConfig(filename="hello.log", level=logging.INFO)
Es werden nun alle Logausgaben in die Datei „hello.log“ geschrieben.
INFO:werkzeug: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) INFO:Main:Funktion start aufgerufen! INFO:werkzeug:127.0.0.1 - - [25/Feb/2021 20:44:11] "[37mGET / HTTP/1.1[0m" 200 -
Wenn du den Flask Server neustartest wird diese Datei NICHT überschrieben sondern es werden die neuen Logausgaben an das Dateiende angehangen.
INFO:werkzeug: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) INFO:Main:Funktion start aufgerufen! INFO:werkzeug:127.0.0.1 - - [25/Feb/2021 20:44:11] "[37mGET / HTTP/1.1[0m" 200 - INFO:werkzeug: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) INFO:Main:Funktion start aufgerufen! INFO:werkzeug:127.0.0.1 - - [25/Feb/2021 20:47:19] "[37mGET / HTTP/1.1[0m" 200 -
Du kannst in dieser Datei die beiden Server starts an der Zeile „INFO:werkzeug: * Running ….“ erkennen.
Wenn du in der IDE Eclipse bist musst du diese Datei jeweils immer neu öffnen um den neuen Inhalt anzeigen zu lassen. Alternativ kannst du auch Notepad++ verwenden welches dich mit einem Dialog auf eine Änderung hinweist.
Gerne möchte ich dir hier das kostenfreie Tool BareTail ans Herz legen. Dieses Tool läd automatisch den neuen Inhalt und kann dir bestimmte Zeilen mit einem Muster farblich hervorheben.
Download des Eclipse Projektes
Hier nun das „Hello World!“ Projekt mit implementierten Logging.