Gere
Gere

Reputation: 12687

Redirect stdout to logger in Python

Can I redirect all output from stdout to a logger I have set up with the standard logging module? (I have os.system calls whose output I'd also like to see or occational print statements)

Upvotes: 5

Views: 5357

Answers (1)

Vinay Sajip
Vinay Sajip

Reputation: 99297

You might be able to make use of the suggestion in this post, summarised below:

import logging

class LoggerWriter:
    def __init__(self, logger, level):
        self.logger = logger
        self.level = level

    def write(self, message):
        if message != '\n':
            self.logger.log(self.level, message)

def main():
    logging.basicConfig(level=logging.DEBUG)
    logger = logging.getLogger("demo")
    info_fp = LoggerWriter(logger, logging.INFO)
    debug_fp = LoggerWriter(logger, logging.DEBUG)
    print >> info_fp, "An INFO message"
    print >> debug_fp, "A DEBUG message"

if __name__ == "__main__":
    main()

When run, the script prints:

INFO:demo:An INFO message
DEBUG:demo:An DEBUG message

Upvotes: 4

Related Questions