Python: redirect_stdout doesn't catch logger

Viewed 78

I'm trying to redirect some logging output.

import sys
import logging
from contextlib import redirect_stdout

logging.basicConfig(stream=sys.stdout)
logger = logging.getLogger()

with open("out.txt", "w") as f:
    with redirect_stdout(f):
        print("STDOUT")
        logger.warning("LOGGER")

I would expect both of these to output to out.txt but instead STDOUT goes to the file, and WARNING:root:LOGGER displays in the terminal.

I've confirmed that that logger is outputting to stdout by removing the redirect stuff and running python script.py > stdout.txt. Then everything gets to the file, as it should.

So the logger must be doing something weird that causes it to not get pick up by redirect_stdout?

(Note: The behaviour is the same with redirect_stderr).

0 Answers
Related