cog*_*imi 9 python formatting logging brackets leftalign
我想用括号格式化记录器并将文本左对齐。
formatter = logging.Formatter('[%(asctime)s] [%(levelname)-8s] [%(funcName)-12s] %(message)s')
Run Code Online (Sandbox Code Playgroud)
这是结果
[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
Run Code Online (Sandbox Code Playgroud)
但我想得到这样的东西
[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
Run Code Online (Sandbox Code Playgroud)
这很容易做到,如以下示例所示:
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()
Run Code Online (Sandbox Code Playgroud)
运行时,上面的脚本会打印:
[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
Run Code Online (Sandbox Code Playgroud)
您应该能够根据您的特定需求调整上面的示例,例如应用过滤器的位置、使用的处理程序等。