/
Russid
/
python_advanced
Обзор
Документация
Войти
/
Russid
/
python_advanced
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
module_06_debugging_begin/homework/hw3/json_adapter.py
42 строки
2 KB
itookyourboo
6 модуль
11 авг 2022, 00:54
11 авг 2022, 00:54
9795883
Код
Авторство
О чём код?
""" Удобно сохранять логи в определённом формате, чтобы затем их можно было фильтровать и анализировать. Сконфигурируйте логгер так, чтобы он писал логи в файл skillbox_json_messages.log в следующем формате: {"time": "<время>", "level": "<уровень лога>", "message": "<сообщение>"} Но есть проблема: если в message передать двойную кавычку, то лог перестанет быть валидной JSON-строкой: {"time": "21:54:15", "level": "INFO", "message": "“"} Чтобы этого избежать, потребуется LoggerAdapter. Это класс из модуля logging, который позволяет модифицировать логи перед тем, как они выводятся. У него есть единственный метод — process, который изменяет сообщение или именованные аргументы, переданные на вход. class JsonAdapter(logging.LoggerAdapter): def process(self, msg, kwargs): # меняем msg return msg, kwargs Использовать можно так: logger = JsonAdapter(logging.getLogger(__name__)) logger.info('Сообщение') Вам нужно дописать метод process так, чтобы в логах была всегда JSON-валидная строка. """ import logging class JsonAdapter(logging.LoggerAdapter): def process(self, msg, kwargs): new_message = msg return new_message, kwargs if __name__ == '__main__': logger = JsonAdapter(logging.getLogger(__name__)) logger.setLevel(logging.DEBUG) logger.info('Сообщение') logger.error('Кавычка)"') logger.debug("Еще одно сообщение")