Я использую модуль регистрации 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. Или есть другой альтернативный способ обработки сообщения?