Je vous connecter à un fichier journal dans une application Flask sous gunicorn et nginx en utilisant la configuration suivante:Connexion une application Flask sur sever à distance ne fonctionne pas
def setup_logging():
stream_handler = logging.StreamHandler()
formatter = logging.Formatter('[%(asctime)s][PID:%(process)d][%(levelname)s][%(name)s.%(funcName)s()] %(message)s')
stream_handler.setFormatter(formatter)
stream_handler.setLevel("DEBUG")
logging.getLogger().addHandler(stream_handler)
file_handler = RotatingFileHandler("log.txt", maxBytes=100000, backupCount=10)
file_handler.setFormatter(logging.Formatter(
'%(asctime)s %(levelname)s: %(message)s '
'[in %(pathname)s:%(lineno)d]'
))
file_handler.setLevel("DEBUG")
logging.getLogger().addHandler(file_handler)
logging.getLogger().setLevel("DEBUG")
inializing ensuite vous connecter avant de créer l'application:
setup_logging()
def create_app(config_name):
app = Flask(__name__)
Puis, en modules Je suis hélidébardage au moyen:
import logging
logger = logging.getLogger(__name__)
x = 2
logger.debug('x: {0}' x)
Logging fonctionne bien sur ma machi locale ne - à la fois la sortie standard et log.txt
Cependant quand je lance l'application sur un rien de serveur distant sont écrites sur log.txt. J'ai été déployé en tant qu'utilisateur avec une autorisation de lecture et d'écriture sur log.txt sur le système distant.
J'ai essayé d'initialiser l'application sur le serveur distant avec DEBUG = True, toujours rien écrit dans le fichier journal. La seule façon que je peux obtenir voir les journaux est en visionnant des fichiers /var/log/supervisor/app-stdout---supervisor-nnn.log mais ceux-ci DonT afficher toutes les sorties d'enregistrement
En utilisant la réponse de HolgerShurig ici Flask logging - Cannot get it to write to a file sur le fichier journal du serveur, je ne reçois que le nom de sortie de l'enregistreur (ie pas de sortie de l'enregistrement au niveau du module)
2017-10-21 00:32:45,125 - file - DEBUG - Debug FILE
machine locale en cours d'exécution même code lo je reçois
2017-10-21 08:35:39,046 - file - DEBUG - Debug FILE
2017-10-21 08:35:42,340 - werkzeug - INFO - * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) ie
2017-10-21 08:38:46,236 [MainThread ] [INFO ] 127.0.0.1 - - [21/Oct/2017 08:38:46] "[37mGET /blah/blah HTTP/1.1[0m" 200 -
J'ai alors changé la configuration de l'exploitation forestière à:
def setup_logging(app):
stream_handler = logging.StreamHandler()
formatter = logging.Formatter('[%(asctime)s][PID:%(process)d][%(levelname)s][%(lineno)s][%(name)s.%(funcName)s()] %(message)s')
stream_handler.setFormatter(formatter)
stream_handler.setLevel(Config.LOG_LEVEL)
app.logger.addHandler(stream_handler)
file_handler = RotatingFileHandler(Config.LOGGING_FILE, maxBytes=Config.LOGGING_MAX_BYTES, backupCount=Config.LOGGING_BACKUP_COUNT)
file_handler.setFormatter(logging.Formatter(
'%(asctime)s %(levelname)s: %(message)s '
'[in %(pathname)s:%(lineno)d]'
))
file_handler.setLevel(Config.LOG_LEVEL)
loggers = [app.logger]
for logger in loggers:
logger.addHandler(file_handler)
app.logger.setLevel(Config.LOG_LEVEL)
app.logger.debug('this message should be recorded in the log file')
et mis à nous ce juste après avoir créé l'application Flask:
setup_logging(app)
I chaque module, je suis encore en utilisant
import logging
logger = logging.getLogger(__name__)
#for example
def example():
logger.debug('debug')
logger.info('info')
logger.warn('warn')
Quand je lance l'application sur ther serveur avec
gunicorn manage:app
la seule chose imprimée dans le fichier log.txt est
2017-10-21 02:48:32,982 DEBUG: this message should be recorded in the log file [in /../../__init__.py:82]
Mais localement MainThread processeses sont présentés ainsi
Toutes les idées?
Comment utilisez-vous l'application sur la machine locale et la machine distante? Vous utilisez le serveur de développement ('flask run') ou utilisez-vous un serveur Web (par exemple, fastcgi dans lighttpd ou apache)? – dlasalle
Sur local utilisant serveur intégré, sur la télécommande via gunicorn + nginx – proximacentauri