Python Friday #63: Logging in Flask

After last week’s first steps with logging, it is now time to add logging to our Flask application.

This post is part of my journey to learn Python. You can find the other parts of this series here.

 

Built-in logger in Flask

Flask uses the standard Python logging, what allows us to write log messages in the same way as we do in our Python scripts. All we need to change is to use app.logger instead of logging:

You can find your log messages next to the ones from Flask:

127.0.0.1 – – [22/Feb/2021 19:17:52] “GET /contact HTTP/1.1” 200 –
127.0.0.1 – – [22/Feb/2021 19:17:52] “GET /static/css/contact.css HTTP/1.1” 200 –
[2021-02-22 19:28:37,619] DEBUG in hello: A log message in level debug
[2021-02-22 19:28:37,620] INFO in hello: A log message in level info
[2021-02-22 19:28:37,621] WARNING in hello: A log message in level warning
[2021-02-22 19:28:37,624] ERROR in hello: A log message in level error
[2021-02-22 19:28:37,625] CRITICAL in hello: A log message in level critical

Flask uses a slightly different log format that includes the file name in the message – in my case hello for hello.py.

 

Logging in Blueprint

If you use Blueprint to clean-up the view functions file you need a little bit more work. When you replace app with blueprint and try to log you get this error:

AttributeError: ‘Blueprint’ object has no attribute ‘logger’

For the parts of our application that use Blueprint we need to import current_app from flask and use the logger that is available there:

What we write to current_app.logger ends up in the same place as our log messages from app.logger:

[2021-02-22 19:17:52,904] INFO in contact_views: Contact form loaded

 

Next

As you can see, logging in Flask is nearly the same as in Python. Only Blueprint has its own challenge that we can solve with the import of current_app. Before I start to configure the Flask logger, I make a small detour to structured logging and Seq as a centralised log server.

1 thought on “Python Friday #63: Logging in Flask”

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.