Fix Python – logger configuration to log to file and print to stdout


Asked By – stdcerr

I’m using Python’s logging module to log some debug strings to a file which works pretty well. Now in addition, I’d like to use this module to also print the strings out to stdout. How do I do this? In order to log my strings to a file I use following code:

import logging
import logging.handlers
logger = logging.getLogger("")
handler = logging.handlers.RotatingFileHandler(
    LOGFILE, maxBytes=(1048576*5), backupCount=7
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")

and then call a logger function like

logger.debug("I am written to the file")

Thank you for some help here!

Now we will see solution for issue: logger configuration to log to file and print to stdout


Just get a handle to the root logger and add the StreamHandler. The StreamHandler writes to stderr. Not sure if you really need stdout over stderr, but this is what I use when I setup the Python logger and I also add the FileHandler as well. Then all my logs go to both places (which is what it sounds like you want).

import logging

If you want to output to stdout instead of stderr, you just need to specify it to the StreamHandler constructor.

import sys
# ...

You could also add a Formatter to it so all your log lines have a common header.


import logging
logFormatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s]  %(message)s")
rootLogger = logging.getLogger()

fileHandler = logging.FileHandler("{0}/{1}.log".format(logPath, fileName))

consoleHandler = logging.StreamHandler()

Prints to the format of:

2012-12-05 16:58:26,618 [MainThread  ] [INFO ]  my message

This question is answered By – Waterboy

This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0