Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

676
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!