1

我想知道是否可以在没有时间戳和模块名称的情况下仅在 absl python 中记录 msg 字符串。例子

I0108 23:40:57.153055 140614090106688 extractor.py:79] processing file: dfcsdf
I0108 23:40:57.162382 140614090106688 extractor.py:72] ['/topic/fdfgd', dfgsdf']
I0108 23:40:57.162861 140614090106688 extractor.py:79] processing file: f456546fd
I0108 23:40:57.171764 140614090106688 extractor.py:72] ['/topic/1', '/topic/2', '/topic/3']

是否有配置只记录如下消息

processing file: dfcsdf
['/topic/fdfgd', dfgsdf']
processing file: f456546fd
['/topic/1', '/topic/2', '/topic/3']

我知道我可以用控制台的打印替换日志记录或编写自定义记录器,我想知道它是否可能在 absl 日志记录中?

4

1 回答 1

5

将格式化程序设置为None

您可以将格式化程序设置为None. 这可能看起来有点棘手,因为它没有很好的文档记录(我必须阅读源代码以确保这是正确的),但以下工作:

from absl import app
from absl import logging


def main(argv):
    logging.get_absl_handler().use_absl_log_file('log', "./FolderName")

    logging.get_absl_handler().setFormatter(None)

    logging.info('Info log')
    logging.warning('Warning log')

if __name__ == '__main__':
    app.run(main)

将格式化程序设置为后,我的日志文件如下所示None

信息日志

警告日志

自定义格式化程序

话虽如此,实现自定义格式化程序并不难,而且我认为更优雅,而且允许您自定义输出。您只需要覆盖该format功能:

from absl import app
from absl import logging
from absl.logging import PythonFormatter

class CustomPythonFormatter(PythonFormatter):
    def format(self, record):
        return super(PythonFormatter, self).format(record)

def main(argv):
    logging.get_absl_handler().use_absl_log_file('log', "./Folder")

    logging.get_absl_handler().setFormatter(CustomPythonFormatter())

    logging.info('Info log')
    logging.warning('Warning log')

if __name__ == '__main__':
    app.run(main)

这给了我与以前相同的结果:

信息日志

警告日志

于 2020-01-09T02:51:14.133 回答