Ich habe eine Web-Benutzeroberfläche über eine Multi-Thread-Regel-Engine. In den meisten Fällen ist das Web-UI so gestaltet, dass es den von der Rules-Engine gesammelten Daten Standard-CRUD-Services zur Verfügung stellt sowie die Regeldienste startet und herunterfährt.Probleme mit der Protokollierung (Flask/Module/Debug)
Ich möchte den Flaschennlogger (current_app.logger) an die Protokollierungsausgabe auf Modulebene anhängen und dann die Ausgabeprotokolle für jeden ausgeführten Dienst konfigurieren.
Einfacher Test mit failure: rules.py
Testfunktion:
def stupid_logging_test():
logging.debug('Will flask log me?')
admin.py
:
@admin.route('/', methods=['GET', 'POST'])
def admin_root():
#show the root admin page.
servers = current_app.config['instance_servers']
metrics = None
if len(servers):
metrics = compileMetrics(servers)
# this includes starting/stopping rules engine and metrics
adminform = ServerAdminForm(request.form)
if request.method == 'POST':
if adminform.startserver.data:
current_app.logger.info('performing rule server start.')
start_source_servers()
#current_app.logger.debug(pprint.pformat(form))
#current_app.logger.debug(str(tabledata))
elif adminform.stopserver.data:
current_app.logger.info('performing rule server stop.')
stop_source_servers()
#current_app.logger.debug(pprint.pformat(form))
#current_app.logger.debug(str(tabledata))
else:
current_app.logger.info('unknown submit?')
current_app.logger.debug('debug line test.')
rules.stupid_logging_test()
return render_template("admin_main.html", adminform=adminform,
metrics=metrics, servers=servers)
Protokollausgabe (Konsole):
--------------------------------------------------------------------------------
INFO in admin [/<snip>/admin.py:51]:
unknown submit?
--------------------------------------------------------------------------------
INFO:ui:unknown submit?
--------------------------------------------------------------------------------
DEBUG in admin [/<snip>/admin.py:52]:
debug line test.
--------------------------------------------------------------------------------
DEBUG:ui:debug line test.
logging output (file)
:
unknown submit?
debug line test.
Und schließlich ist hier meine Protokollkonfiguration (bisher)
ui:__init__.py
# ... other app config
log_target = RotatingFileHandler(app.config['LOGFILE'], maxBytes=1024 * 1024 * 100, backupCount=20)
if 'DEBUG' in app.config and app.config['DEBUG']:
log_target.setLevel(logging.DEBUG)
else:
log_target.setLevel(logging.WARN)
app.logger.addHandler(log_target)
rules_logger = getLogger('rules')
rules_logger.addHandler(log_target)
app.config['core_log'] = log_target
ich das Gefühl, dass mein Problem mit der getLogger Methode zu tun hat. Ich gebe dem Logger keinen Namen, aber ich nehme an, dass der Standard der Name des Moduls selbst ist?
in rules.py was 'logging' gleich? Sie protokollieren 'debug line test' zu' current_app.logger', aber in rules.py loggen Sie sie in eine 'logging'-Variable ein, die Sie nicht angegeben haben, wenn sie anders sind, dann werden sie natürlich zu verschiedenen Protokollen gehen. –
@ TadhgMcDonald-Jensen ist es nur das Logging-Modul. In der Dokumentation, die ich gelesen habe, scheint etwas Verwirrung zu herrschen. Wenn Sie einen bestimmten Logger in einem Modul konfigurieren, wird empfohlen, '' mylogger = getLogger (__ name __) '' 'zu verwenden. Es scheint jedoch auch sinnvoll zu sein, das Logging-Modul direkt zu verwenden, ohne einen bestimmten Logger zu konfigurieren. – SkyLeach
@ TadhgMcDonald-Jensen mit dem oben genannten, ein Modulebene "logger = logging.getLogger (__ Name __)" scheint auch zu scheitern. – SkyLeach