Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

Flask logging example

View foo.log
1 2
A warning occurred (42 apples)
An error occurred
View foo.log
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import logging
from logging.handlers import RotatingFileHandler
 
from flask import Flask
 
app = Flask(__name__)
 
@app.route('/')
def foo():
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')
app.logger.info('Info')
return "foo"
 
if __name__ == '__main__':
handler = RotatingFileHandler('foo.log', maxBytes=10000, backupCount=1)
handler.setLevel(logging.INFO)
app.logger.addHandler(handler)
app.run()

Thanks for the tip

Thanks dude

Lovely my friend! Thanks a lot for putting up this code chunk!

webus commented

Thanks!

Thanks its very useful :) Does flask provides a default logger or we have to provide one for it like RotatingFileHandler?

You can add this:

handler.setLevel(logging.ERROR)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")

to include time and other info in the log item.

If you want line numbers as well in your logs, you can use this formatter:

    formatter = logging.Formatter(
        "[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s")
    handler = RotatingFileHandler(LOG_FILENAME, maxBytes=10000000, backupCount=5)
    handler.setLevel(logging.DEBUG)
    handler.setFormatter(formatter)
    app.logger.addHandler(handler)

If you also want to see the log messages emitted by Werkzeug in your log file, you can add the following:

    log = logging.getLogger('werkzeug')
    log.setLevel(logging.DEBUG)
    log.addHandler(handler)

thanks :)

Thank you

Thanks !

Prawyn commented

Thanks

Thanks

Muchas gracias..

I had to setLevel on app.logger as well to make it log from app.logger.info("...") and app.logger.debug("..."). If I only set the level of the handler, it would only log warn, error, and critical messages.

Here's what worked for me:

handler = TimedRotatingFileHandler('logs/foo.log', when='midnight', interval=1)
handler.setLevel(logging.DEBUG)
app.logger.addHandler(handler)
app.logger.setLevel(logging.DEBUG)

Thx~ It help me

Where will be the .log files be saved??

Thanks @KCzar -- I was having a devil of a time figuring out why my info messages were not being logged, setting level on app.logger fixed that problem.

It's very useful, thank you!

Thanks, useful code . It will be better if uniform field separator is used, this allows for log processing by automation tools . Eg
formatter = logging.Formatter(
"%(asctime)s | %(pathname)s:%(lineno)d |
%(funcName)s | %(levelname)s | %(message)s ")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.