ich versuche gerade eine vernünftige Vorlage für Web-Projekte mit Flask zu erstellen.
Ich bin da noch ziemlich am Anfang und komme jetzt schon nicht weiter.
Und zwar habe ich massive Probleme das Logging irgendwie korrekt zu konfigurieren...
Ich habe schon mega viel recherchiert und Code-Schnipsel ausprobiert, aber irgendwie mag es nicht funktionieren.
Hier erst mal die Probleme, danach der Code.
Problem 1: Das gesetzte Log Level wird nicht respektiert.
Ich habe ERROR als Log level gesetzt, trotzdem werden auch logs für DEBUG, INFO und WARNING angezeigt.
Problem 2: Einige Logger tauchen nicht in der Liste aller Logger auf.
Die Logger flaskapp und werkzeug werden nicht aufgelistet. Vermutlich wurden sie deshalb auch nicht mit dem korrekten Level (ERROR) ausgestattet?
Code: Alles auswählen
# __init__.py
import os
from dotenv import load_dotenv
from flask import Flask
from flaskapp.config import config
from flaskapp.logging import MyLogger
# Load env vars from .env file
load_dotenv()
# Instanciate extensions
log = MyLogger()
def create_app():
app = Flask(__name__)
# Select config class depending on env var
app.config.from_object(config[os.getenv('APPLICATION_ENV')])
# Initialize extensions
log.init_app(app)
# TEST
app.logger.debug('**DEBUG** after initializing log extension')
app.logger.info('**INFO** after initializing log extension')
app.logger.warning('**WARNING** after initializing log extension')
app.logger.error('**ERROR** after initializing log extension')
app.logger.critical('**CRITICAL** after initializing log extension')
# Import and register blueprints
from flaskapp.main.routes import main
app.register_blueprint(main)
return app
Code: Alles auswählen
# logging.py
import logging
class MyLogger:
def __init__(self, app=None):
if app is not None:
self.init_app(app)
def init_app(self, app):
# Set log level
logging.basicConfig(level=logging.ERROR)
# Get list of all available loggers including root logger
all_loggers = [logging.getLogger()]
all_loggers = all_loggers + [logging.getLogger(name) for name in logging.root.manager.loggerDict]
# TEST
for i in all_loggers:
print(i)
Code: Alles auswählen
* Serving Flask app '/home/myuser/projekte/flask-template/flaskapp' (lazy loading)
* Environment: development
* Debug mode: on
# Die drei Logger wurde auf Level ERROR gesetzt
# Aber die anderen zwei Logger 'werkzeug' und 'flaskapp' fehlen
<RootLogger root (ERROR)>
<Logger dotenv.main (ERROR)>
<Logger dotenv (ERROR)>
# Es werden alle Log Levels ausgegeben, nicht nur ERROR.
DEBUG:flaskapp:**DEBUG** after initializing log extension
INFO:flaskapp:**INFO** after initializing log extension
WARNING:flaskapp:**WARNING** after initializing log extension
ERROR:flaskapp:**ERROR** after initializing log extension
CRITICAL:flaskapp:**CRITICAL** after initializing log extension
INFO:werkzeug: * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
INFO:werkzeug: * Restarting with stat
<RootLogger root (ERROR)>
<Logger dotenv.main (ERROR)>
<Logger dotenv (ERROR)>
DEBUG:flaskapp:**DEBUG** after initializing log extension
INFO:flaskapp:**INFO** after initializing log extension
WARNING:flaskapp:**WARNING** after initializing log extension
ERROR:flaskapp:**ERROR** after initializing log extension
CRITICAL:flaskapp:**CRITICAL** after initializing log extension
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger PIN: 648-368-123
Code: Alles auswählen
werkzeug_logger = logging.getLogger('werkzeug')
flaskapp_logger = logging.getLogger('flaskapp')
Code: Alles auswählen
* Serving Flask app '/home/myuser/projekte/flask-template/flaskapp' (lazy loading)
* Environment: development
* Debug mode: on
# Jetzt werden auch die anderen zwei Logger angezeigt
<RootLogger root (ERROR)>
<Logger dotenv.main (ERROR)>
<Logger dotenv (ERROR)>
<Logger werkzeug (ERROR)>
<Logger flaskapp (ERROR)>
# Trotzdem werden auch Meldungen unter Level ERROR ausgegeben :(
DEBUG:flaskapp:**DEBUG** after initializing log extension
INFO:flaskapp:**INFO** after initializing log extension
WARNING:flaskapp:**WARNING** after initializing log extension
ERROR:flaskapp:**ERROR** after initializing log extension
CRITICAL:flaskapp:**CRITICAL** after initializing log extension
INFO:werkzeug: * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
INFO:werkzeug: * Restarting with stat
<RootLogger root (ERROR)>
<Logger dotenv.main (ERROR)>
<Logger dotenv (ERROR)>
<Logger werkzeug (ERROR)>
<Logger flaskapp (ERROR)>
DEBUG:flaskapp:**DEBUG** after initializing log extension
INFO:flaskapp:**INFO** after initializing log extension
WARNING:flaskapp:**WARNING** after initial
ERROR:flaskapp:**ERROR** after initializing log extension
CRITICAL:flaskapp:**CRITICAL** after initializing log extension
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger PIN: 648-368-123