Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

667
Visualizações
Python, Flask imprime en la consola y registra el archivo simultáneamente

Estoy usando python 3.7.3, con matraz versión 1.0.2.

Al ejecutar mi archivo app.py sin las siguientes importaciones:

 import logging logging.basicConfig(filename='api.log',level=logging.DEBUG)

Flask mostrará información de depuración relevante en la consola, como solicitudes POST/GET y de qué IP provienen.

Tan pronto como se habilita el registro DEBUG, ya no recibo este resultado. He intentado ejecutar mi aplicación en modo de depuración:

 app.run(host='0.0.0.0', port=80, debug=True)

Pero esto produce los mismos resultados. ¿Hay alguna forma de habilitar tanto la salida de la consola como el registro de Python? Esto puede sonar como una solicitud tonta, pero me gustaría usar la consola con fines de demostración, mientras tengo el archivo de registro presente para la resolución de problemas.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Flask tiene un registrador incorporado al que se puede acceder mediante app.logger . Es solo una instancia de la clase logging.Logger de la biblioteca estándar, lo que significa que puede usarla como lo haría normalmente con el registrador básico. La documentación para ello está aquí .

Para que el registrador incorporado escriba en un archivo, debe agregar un logging.FileHandler al registrador. Establecer debug=True en app.run , inicia el servidor de desarrollo, pero no cambia el nivel de registro para depurar. Como tal, deberá establecer el nivel de registro en logging.DEBUG manualmente.

Ejemplo:

 import logging from flask import Flask app = Flask(__name__) handler = logging.FileHandler("test.log") # Create the file logger app.logger.addHandler(handler) # Add it to the built-in logger app.logger.setLevel(logging.DEBUG) # Set the log level to debug @app.route("/") def index(): app.logger.error("Something has gone very wrong") app.logger.warning("You've been warned") app.logger.info("Here's some info") app.logger.debug("Meaningless debug information") return "Hello World" app.run(host="127.0.0.1", port=8080)

Si luego mira el archivo de registro, debería tener las 4 líneas impresas y la consola también tendrá las líneas.

over 4 years ago · Santiago Trujillo Relatório

0

Encontré una solución:

 import logging from flask import Flask app = Flask(__name__) logger = logging.getLogger('werkzeug') # grabs underlying WSGI logger handler = logging.FileHandler('test.log') # creates handler for the log file logger.addHandler(handler) # adds handler to the werkzeug WSGI logger @app.route("/") def index(): logger.info("Here's some info") return "Hello World" if __name__ == '__main__': app.run(host='0.0.0.0', port=80)

Otros ejemplos:

 # logs to console, and log file logger.info("Some text for console and log file") # prints exception, and logs to file except Exception as ue: logger.error("Unexpected Error: malformed JSON in POST request, check key/value pair at: ") logger.error(ue)

Fuente: https://docstrings.wordpress.com/2014/04/19/flask-access-log-write-requests-to-file/

Si el enlace está roto:

Puede estar confundido porque agregar un controlador a app.logger de Flask no capta el resultado que ve en la consola como:

 127.0.0.1 - - [19/Apr/2014 18:51:26] "GET / HTTP/1.1" 200 -

Esto se debe a que app.logger es para Flask y esa salida proviene del módulo WSGI subyacente, Werkzeug.

Para acceder al registrador de Werkzeug, debemos llamar a logging.getLogger() y darle el nombre que usa Werkzeug. Esto nos permite registrar solicitudes en un registro de acceso utilizando lo siguiente:

 logger = logging.getLogger('werkzeug') handler = logging.FileHandler('access.log') logger.addHandler(handler) # Also add the handler to Flask's logger for cases # where Werkzeug isn't used as the underlying WSGI server. # This wasn't required in my case, but can be uncommented as needed # app.logger.addHandler(handler)

Por supuesto, puede agregar su propio formato y otros controladores.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda