2016-03-23 7 views
0

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?

+0

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. –

+0

@ 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

+0

@ TadhgMcDonald-Jensen mit dem oben genannten, ein Modulebene "logger = logging.getLogger (__ Name __)" scheint auch zu scheitern. – SkyLeach

Antwort

0

das Festlegen der Loglevel für den Handler war falsch. Die folgende Änderung das Problem behoben: ui:__init__.py:

log_target = RotatingFileHandler(app.config['LOGFILE'], maxBytes=1024 * 1024 * 100, backupCount=20) 
loggers = [app.logger, getLogger('rules')] 
for logger in loggers: 
    if 'DEBUG' in app.config and app.config['DEBUG']: 
     logger.setLevel(logging.DEBUG) 
    else: 
     logger.setLevel(logging.WARN) 
    logger.addHandler(log_target) 
app.config['core_log'] = log_target 
Verwandte Themen