2016-03-23 20 views
0

Çok iş parçacıklı kurallar altyapısının üzerinde bir web UI var. Çoğunlukla, web kullanıcı arayüzü kurallar motoru tarafından toplanan verilere standart CRUD hizmetleri sağlamak ve kuralların başlatılması ve kapatılması için tasarlanmıştır.Günlüğe kaydetme (Flask/Modül/Hata Ayıklama)

Flask logger'ı (current_app.logger) modül seviyesi kayıt çıkışına bağlamak ve daha sonra her çalışan servis için çıkış kayıtlarını yapılandırmak istiyorum. yetmezliği olan

Basit testi: rules.py Test fonksiyonu:

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) 

Günlüğü çıkışı (konsol):

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

sonunda burada
unknown submit? 
debug line test. 

Vebenim sorun getLogger yöntemi ile ilgisi var hissine kapıldım

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 

(şimdiye kadar) benim günlük yapılandırmasıdır. Kaydediciye bir isim vermiyorum, ama varsayılanın modülün kendisinin adı olduğunu mu varsayıyorum? İşleyicideki loglevel'i ayarlamak

+0

: ui:__init__.py: Aşağıdaki değişiklik sorunu çözüldü? "debug line test" öğesini "current_app.logger" ile kaydedersiniz, ancak rules.py içerisinde sağladığınız bir "logging" değişkenine giriş yaparsınız, eğer farklıysa, o zaman farklı kayıtlara giderler. –

+0

@ TadhgMcDonald-Jensen bu sadece bir kayıt modülü. Okuduğum belgelerde bunun hakkında biraz kafa karışıklığı var gibi görünüyor. Bir modülde belirli bir kaydediciyi yapılandırırsanız, önerilen yöntem '' mylogger = getLogger (__ isim __) '' yapmaktır, ancak aynı zamanda kayıt modülünü doğrudan belirli bir kaydediciyi yapılandırmadan doğrudan kullanmak için geçerli gibi görünmektedir. – SkyLeach

+0

@ TadhgMcDonald-Jensen ile yukarıda bahsedilen, bir modül seviyesinde '' logger = logging.getLogger (__ isim __) '' da başarısız gibi görünüyor. – SkyLeach

cevap

0

. `Etmek logging` eşit olanı rules.py içinde

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 
İlgili konular