Как использовать логирование с цветами (только в потоке)? - PullRequest
0 голосов
/ 11 апреля 2019

TL; DR: Как получить потоковый обработчик для печати журналов с цветами, а обработчик файлов - без буквенных символов кода?Любой подход меня устраивает, пока я все еще использую стандартные библиотеки Python.

-

Я искал, как добавить цвет в логгер, когда он транслируется. Кроме того, я хотел бы использовать стандартную библиотеку журналов Python.

Я нашел это решение: https://stackoverflow.com/a/7995762/11037602

Это помогло мне, проблема в том, что мой журнал регистрируетв поток и в файл.И файл также получает символы escape / colors, например:

  • [1; 33mWARNING [1; 0m - run - log

Вместо:

  • ПРЕДУПРЕЖДЕНИЕ - запустите - log

Мой код:

def setup_logger():
  logger = logging.getLogger()

  #Code suggested in SO question
  logging.addLevelName( logging.WARNING, "\033[1;31m%s\033[1;0m" % logging.getLevelName(logging.WARNING))
  logging.addLevelName( logging.ERROR, "\033[1;41m%s\033[1;0m" % logging.getLevelName(logging.ERROR))

  logger.setLevel(logging.DEBUG) 
  formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(funcName)s - %(message)s')

  fh = logging.FileHandler('file.log')
  fh.setFormatter(formatter)
  logger.addHandler(fh)

  sh = logging.StreamHandler()
  sh.setFormatter(formatter)
  logger.addHandler(sh)

  return logger

Как я уже сказал, это работаетОднако он также записывает символы в файл журнала.

Если вы нажмете «показать еще 2 комментария» на вопрос, который я связал, пользователь @lesnik предложил поместить код ответа внутрь оператора if, я предполагаю, что он имел в виду что-то вроде этого:

if sys.stderr.isatty():
  logging.addLevelName( logging.WARNING, "\033[1;31m%s\033[1;0m" % logging.getLevelName(logging.WARNING))
  logging.addLevelName( logging.ERROR, "\033[1;41m%s\033[1;0m" % logging.getLevelName(logging.ERROR))

РЕДАКТИРОВАТЬ: Исправил опечатку (указал @Brad Solomon), но просто добавив это, если заявление не решило мою проблему .Символы все еще зарегистрированы в файле.

Подводя итог, как я могу иметь потоковый обработчик для печати журналов с цветами, а файловый обработчик регистрирует их без буквенных символов кода?Любой подход меня устраивает, пока я все еще использую стандартные библиотеки Python.

1 Ответ

0 голосов
/ 11 апреля 2019

Как насчет использования этого модуля? https://coloredlogs.readthedocs.io/en/latest/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...