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.