Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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)

like image 301
Gerenuk Avatar asked Oct 09 '22 14:10

Gerenuk


1 Answers

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
like image 131
Vinay Sajip Avatar answered Oct 13 '22 11:10

Vinay Sajip