import logging, inspect class IndentFormatter(logging.Formatter): def __init__( self, fmt=None, datefmt=None ): logging.Formatter.__init__(self, fmt, datefmt) self.baseline = len(inspect.stack()) def format( self, rec ): stack = inspect.stack() rec.indent = ' '*(len(stack)-self.baseline) rec.function = stack[8][3] out = logging.Formatter.format(self, rec) del rec.indent; del rec.function return out # USAGE: formatter = IndentFormatter("[%(levelname)s]%(indent)s%(function)s:%(message)s") logger = logging.getLogger('logger') handler = logging.StreamHandler() handler.setFormatter(formatter) logger.addHandler(handler) TRON = logging.DEBUG + 1 logging.addLevelName(TRON, "TRON") logger.setLevel(TRON) logger.log(TRON, 'I am a logger') def f3(): logger.log(TRON, 'I am f3') def f2(): logger.log(TRON, 'I am f2') f3() def f1(): logger.log(TRON, 'I am f1') f2() def go(): logger.log(TRON, 'I am go.') f1() f2() f3() f1() go()