экранирование символов HTML в сообщении перед входом - PullRequest
0 голосов
/ 17 июня 2019

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

formatter = logging.Formatter("<tr class='%(levelname)s'><td>%(name)s</td><td>%(message)s</td></tr>")

Оставшийся html добавляется после выхода из приложения и создания файла журнала.

Однако в некоторых моих сообщениях, которые я регистрирую, некоторые сообщения содержат символы html (особенно <>), которые обрабатываются как html, когда веб-страница открыта и не работает, или вывод не виден из-за пользовательских тегов.

Я попробовал следующее решение.

class HTMLAdaptor(logging.LoggerAdaptor):
    def __init__(self, logger):
        super(HTMLAdaptor, self).__init__(logger, {})

    def process(self, msg, kwargs):
        return html.escape(msg), kwargs

logger = HTMLAdaptor(old_logger)  # formatter is added to old_logger and logger is used for logging by the application

Но это решение работает только тогда, когда в сообщении отсутствуют ключевые аргументы, такие как

logging.critical("Error in the class <FlowHandler>")

Но когда есть переменные формата, также как в следующем случае

logging.warning("Wrong data type: %s", type(wrong_data))

В таких случаях вывод такой же, как если бы HTMLAdaptor не использовался.

В Python 3 есть способ изменить фабричный регистратор журналов в модуле журналирования, но как это можно реализовать в Python 2.7. Или есть другой альтернативный способ обработки сообщения?

...