I'm developing a Python Flask API for a live coding interview, and I've integrated some debug logging using the standard logging module with basicConfig to write logs to a file. I've added around 20-30 logger.debug() statements throughout my request handlers, but I've noticed that the response times have skyrocketed from 200ms to about 2 seconds after implementing this logging. The performance drop is making my application look terrible during the live demo, and I don't want to troubleshoot this on camera. Is it really the file I/O that's causing this slowdown, or am I possibly configuring the logging incorrectly?
3 Answers
It's always a balance between seeing logs right away and not slowing down your app. If you're worried about losing logs if the app crashes, you might think about sending logs over the network to another app that displays them. That could actually be faster than writing to disk, especially on slower drives.
File I/O can indeed be quite costly, especially if each log needs to open, write, and close the file each time. Try to keep the file open for the lifetime of the application, or consider batching your log messages and writing them in bulk at intervals. That could alleviate some of the delay you're seeing.
File I/O can be pretty blocking by default. Each log call waits for the write to finish, which can really slow things down. You might want to look into asynchronous logging or using a QueueHandler to buffer writing to the log. That way, your request handlers won't be held up while waiting for the logging to complete.
I hear you about the live demo stress, though. Just try to prioritize the demo and manage the logging after if needed!

Yeah, using QueueHandler sounds like a solid plan! Just remember to log in a fire-and-forget manner to make it more efficient.