I'm trying to log messages in Flask both to file and to stdout. I've been reading the official Flask docs and came up with this:
from flask import Flask import logging from logging import Formatter, FileHandler app = Flask(__name__) @app.route('/') def hello_world(): app.logger.debug('second test message...') return 'Hello World!' if __name__ == '__main__': #Setup the logger file_handler = FileHandler('output.log') handler = logging.StreamHandler() file_handler.setLevel(logging.DEBUG) handler.setLevel(logging.DEBUG) file_handler.setFormatter(Formatter( '%(asctime)s %(levelname)s: %(message)s ' '[in %(pathname)s:%(lineno)d]' )) handler.setFormatter(Formatter( '%(asctime)s %(levelname)s: %(message)s ' '[in %(pathname)s:%(lineno)d]' )) app.logger.addHandler(handler) app.logger.addHandler(file_handler) app.logger.error('first test message...') app.run()
There are several problems:
output.log
file is generatedOnly the first logging message works:
app.logger.error('testing...')
And only in stdout...the one in the view "/" does not even print to stdout... am I doing something wrong?
This is the output from starting the app and going to /:
2015-03-08 11:33:27,183 ERROR: first test message... [in /home/mosquito/python_projects/flask_tst/flask_tst.py:31] * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 127.0.0.1 - - [08/Mar/2015 11:33:43] "GET / HTTP/1.1" 200 -
To start with logging in Flask, first import the logging module from Python. This logger module comes out of the box from the Python installation and does not need configuration. The Python logging module logs events based on pre-defined levels. The recorded log events are known as log records.
Using the Default Logging System for Flask Python Logging has a default Logger – BasicConfig which we can use to log our messages. The logs are stored in files with . log extension.
Your (debug) logging messages are getting suppressed by Flask as you're not running in debug mode. If you set the following flag to True, your code will work.
app.run(debug=True)
The messages will now appear as expected.
BennyE$ python3 stackoverflow.py 2015-03-08 12:04:04,650 ERROR: firs test message... [in stackoverflow.py:31] * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) * Restarting with stat 2015-03-08 12:04:04,807 ERROR: firs test message... [in stackoverflow.py:31] -------------------------------------------------------------------------------- DEBUG in stackoverflow [stackoverflow.py:11]: second test message... -------------------------------------------------------------------------------- 2015-03-08 12:04:13,789 DEBUG: second test message... [in stackoverflow.py:11] 192.168.178.23 - - [08/Mar/2015 12:04:13] "GET / HTTP/1.1" 200 - -------------------------------------------------------------------------------- DEBUG in stackoverflow [stackoverflow.py:11]: second test message... -------------------------------------------------------------------------------- 2015-03-08 12:04:14,899 DEBUG: second test message... [in stackoverflow.py:11] 192.168.178.23 - - [08/Mar/2015 12:04:14] "GET / HTTP/1.1" 200 -
This is the output in the associated output file:
BennyE$ cat output.log 2015-03-08 11:58:22,226 ERROR: firs test message... [in stackoverflow.py:31] 2015-03-08 12:04:04,650 ERROR: firs test message... [in stackoverflow.py:31] 2015-03-08 12:04:04,807 ERROR: firs test message... [in stackoverflow.py:31] 2015-03-08 12:04:13,789 DEBUG: second test message... [in stackoverflow.py:11] 2015-03-08 12:04:14,899 DEBUG: second test message... [in stackoverflow.py:11]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With