How to write custom python logging handler? How to write custom python logging handler? python python

How to write custom python logging handler?


import loggingclass ProgressConsoleHandler(logging.StreamHandler):    """    A handler class which allows the cursor to stay on    one line for selected messages    """    on_same_line = False    def emit(self, record):        try:            msg = self.format(record)            stream = self.stream            same_line = hasattr(record, 'same_line')            if self.on_same_line and not same_line:                stream.write(self.terminator)            stream.write(msg)            if same_line:                stream.write('... ')                self.on_same_line = True            else:                stream.write(self.terminator)                self.on_same_line = False            self.flush()        except (KeyboardInterrupt, SystemExit):            raise        except:            self.handleError(record)if __name__ == '__main__':    import time    progress = ProgressConsoleHandler()    console  = logging.StreamHandler()      logger = logging.getLogger('test')    logger.setLevel(logging.DEBUG)     logger.addHandler(progress)    logger.info('test1')    for i in range(3):        logger.info('remaining %d seconds', i, extra={'same_line':True})        time.sleep(1)       logger.info('test2')

Notice that only one handler is being registered, and the extra keyword argument to let the handler know it should stay on one line. There is more logic in the emit() method to handle changes between messages that should stay on one line and messages that need to have their own line.