7

我想用括号格式化记录器并将文本左对齐。

formatter = logging.Formatter('[%(asctime)s] [%(levelname)-8s] [%(funcName)-12s]   %(message)s')

这是结果

[2019-09-13 16:22:56,050] [INFO    ] [main        ]   Message 1
[2019-09-13 16:22:56,050] [DEBUG   ] [do_debug    ]   Message 2
[2019-09-13 16:22:56,050] [WARNING ] [do_warning  ]   Message 3

但我想得到这样的东西

[2019-09-13 16:22:56,050] [INFO]     [main]           Message 1
[2019-09-13 16:22:56,050] [DEBUG]    [do_debug]       Message 2
[2019-09-13 16:22:56,050] [WARNING]  [do_warning]     Message 3
4

1 回答 1

4

这很容易做到,如以下示例所示:

import logging

logger = logging.getLogger(__name__)

def do_debug():
    logger.debug('Message 2')

def do_warning():
    logger.warning('Message 3')

def main():
    logger.info('Message 1')
    do_debug()
    do_warning()

def fmt_filter(record):
    record.levelname = '[%s]' % record.levelname
    record.funcName = '[%s]' % record.funcName
    return True

if __name__ == '__main__':
    FMT = '[%(asctime)s] %(levelname)-10s %(funcName)-12s   %(message)s'
    f = logging.Formatter(FMT)
    h = logging.StreamHandler()
    h.setFormatter(f)
    logger.setLevel(logging.DEBUG)
    logger.addHandler(h)
    logger.addFilter(fmt_filter)
    main()

运行时,上面的脚本打印:

[2020-02-01 21:36:48,758] [INFO]     [main]         Message 1
[2020-02-01 21:36:48,758] [DEBUG]    [do_debug]     Message 2
[2020-02-01 21:36:48,774] [WARNING]  [do_warning]   Message 3

您应该能够根据您的特定需求调整上面的示例,例如应用过滤器的位置、使用的处理程序等。

于 2020-02-01T21:39:51.500 回答