2013-12-08 26 views
7

Sto provando a configurare un'app Flask di tipo Heroku, ma non riesco a capire come attivare la registrazione.Registrazione del pallone con il caporeparto

Senza Foreman, ho potuto creare un'applicazione HelloWorld come descritto nella Flask tutorial:

from flask import Flask 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    app.logger.debug('A value for debugging') 
    app.logger.warning('A value for warning') 
    return "Hello World!" 

if __name__ == "__main__": 
    app.run(debug=True) 

iniziare in questo modo:

python hello.py 

e hanno la registrazione in stdout.

Quando seguo il Heroku tutorial, tuttavia, non c'è app.run linea:

import os 
from flask import Flask 

app = Flask(__name__) 

@app.route('/') 
def hello(): 
    app.logger.debug('A value for debugging') 
    app.logger.warning('A value for warning') 
    return 'Hello World!' 

E così io non riesco a capire come far funzionare in modalità debug e/o ottenere output di registrazione:

foreman start -p 5000 

Procfile:

web: gunicorn hello:app 

risposta

11

La configurazione di registrazione di default per un Flask pps è diverso nella modalità di debug rispetto alla produzione.

Nel tuo primo esempio sei in modalità di debug. In questo caso, Flask definisce un gestore di registrazione che registra tutti i messaggi con livello logging.DEBUG o superiore a stderr.

Il secondo esempio non è in modalità di debug. Quando la modalità di debug non è abilitata, Flask crea un oggetto logger ma non aggiunge alcun gestore, quindi non viene stampato nulla.

per Foreman e Heroku è necessario i registri da inviare al stdout o stderr, quindi tutto quello che dovete fare è aggiungere un StreamHandler con il livello di registrazione della vostra scelta:

import os 
from flask import Flask 

app = Flask(__name__) 

# log to stderr 
import logging 
from logging import StreamHandler 
file_handler = StreamHandler() 
app.logger.setLevel(logging.DEBUG) # set the desired logging level here 
app.logger.addHandler(file_handler) 

@app.route('/') 
def hello(): 
    app.logger.debug('A value for debugging') 
    app.logger.warning('A value for warning') 
    return 'Hello World!' 

In alternativa, se si preferisce può fare niente di tutto questo e basta attivare la modalità di debug per l'applicazione controllata Foreman/Heroku, anche se questo non sarebbe qualcosa mi consiglia per un'applicazione di produzione:

from flask import Flask 
app = Flask(__name__) 
app.debug = True 
+0

@ Miguel- grazie, ma questo sta lavorando solo per registrazione a livello di avviso. la registrazione a livello di debug non viene ancora visualizzata. Come posso eseguire l'app in modalità di debug con Foreman? – Yarin

+0

@Yarin: Ho aggiornato il codice, ho impostato il livello di registrazione nel gestore, non nel registratore principale. Ho anche aggiunto uno snippet che mostra come impostare la modalità di debug senza chiamare 'app.run()'. – Miguel

+0

@ Miguel- Perfect- la singola riga 'app.debug = True' era davvero tutto ciò di cui avevo bisogno. – Yarin