python logging string formatting

前端 未结 3 2109
隐瞒了意图╮
隐瞒了意图╮ 2021-01-04 14:09

I am using python\'s log formatter to format log records and i have a fmt value of

fmt = \"[%(filename)s:%(lineno)s] %(message)s\"

What i w

3条回答
  •  再見小時候
    2021-01-04 14:50

    As an example, this Formatter ensures a fixed width "[%(filename)s:%(lineno)s]" by either truncating the filename, or right-padding (after the line number) with spaces.

    class MyFormatter(logging.Formatter):
        width = 10
    
        def format(self, record):
            max_filename_width = self.width - 3 - len(str(record.lineno))
            filename = record.filename
            if len(record.filename) > max_filename_width:
                filename = record.filename[:max_filename_width]
            a = "%s:%s" % (filename, record.lineno)
            return "[%s] %s" % (a.ljust(self.width), record.msg)
    
    if __name__ == '__main__':
        logger = logging.getLogger('simple_example')
        logger.setLevel(logging.DEBUG)
        ch = logging.StreamHandler()
        ch.setLevel(logging.DEBUG)
        formatter = MyFormatter()
        ch.setFormatter(formatter)
        logger.addHandler(ch)
    
        logger.debug('No one expects the spammish repetition')
    

    EDIT:

    If you want to ensure a minimum width of 10 characters, ditch the filename stuff.

    def format(self, record):
        a = "%s:%s" % (record.filename, record.lineno)
        return "[%s] %s" % (a.ljust(self.width), record.msg)
    

提交回复
热议问题