在python logger中将多个字段填充在一起

时间:2017-09-01 21:13:14

标签: python logging

是否还要在格式化程序中将多个日志记录值组合在一起,以便将它们作为单个项目填充?

我的日志格式化程序如下所示:

'%(asctime)s %(module)s:%(funcName)s:%(lineno)-15d %(levelname)-8s %(name)s: %(message)s'

我希望将模块,funcName和lineno字段填充在一起。使用此格式化程序运行会生成此输出:

2017-09-01 21:06:29,299 app:main:48              INFO     pub: main start
2017-09-01 21:06:29,434 app:push_data:36              INFO     pub: push data

但我希望它像:

2017-09-01 21:06:29,299 app:main:48           INFO     pub: main start
2017-09-01 21:06:29,434 app:push_data:36      INFO     pub: push data

1 个答案:

答案 0 :(得分:0)

我最近遇到了类似问题,并通过制作自定义logging.Formatter解决了这个问题。

在你的ini文件中,在格式化程序块下添加以下行:

class=my_log_formatter.MyLogFormatter

此外,您应该删除以format=开头的行(如果存在)。它看起来像这样:

format=%(asctime)s %(name)-40s:%(lineno)-4s %(levelname)-8s %(message)s

然后创建一个新类:

import logging
class MyLogFormatter(logging.Formatter):
    def format(self, record):
        location = '%s.%s:%s' % (record.name, record.funcName, record.lineno)
        msg = '%s %-60s %-8s %s' % (self.formatTime(record), location, record.levelname, record.msg)
        record.msg = msg
        return super(MyLogFormatter, self).format(record)