Python протоколирование без имени модуля времени - PullRequest
1 голос
/ 09 января 2020

Я хотел знать, возможно ли регистрировать только строку msg в absl python без отметки времени и имени модуля. Пример

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?

1 Ответ

2 голосов
/ 09 января 2020

Установка форматера на 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)

Это дает мне тот же результат, что и раньше:

Информационный журнал

Журнал предупреждений

...