Может есть способ лучше?

Предыстория

Летом 2016 года я начал свою первую стажировку в отличной компании. Часть, которая не была удивительной, заключалась в том, что ведение журнала файлов использовалось для нескольких монолитных приложений (с тех пор они были изменены). Как вы понимаете, было довольно сложно искать в этих файлах, чтобы выяснить, что происходило в определенное время. Это заставило меня задуматься о том, как я мог бы лучше регистрировать свои приложения. Введите Python.

Изначально я имел в виду модуль журналирования Python. Есть отличный учебник, который объясняет функциональность модуля. Он имеет несколько интересных функций, таких как различные уровни ведения журнала, такие как отладка, информация, ошибка и т. Д. К сожалению, модуль выводит журналы в файл, а это не то, что я искал. Я надеялся, что появится способ вывода в базу данных.

Возможное решение?

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

Таблица Application содержит все различные приложения, которые будут использовать базу данных журналов. Таблицы «Информация», «Ошибка» и «Отладка» - это разные уровни ведения журнала, на которых могут регистрироваться события. По сути, эти таблицы основаны на той же идее, что и модуль ведения журнала Python. Последней частью, которую я создал, был класс Python, который можно импортировать в другой файл.

Чтобы импортировать файл, я просто сделал это:

from my_logger import MyLogger

Чтобы создать объект класса для нашего недавно импортированного модуля регистрации:

logger = MyLogger("Application Name", "mysql://<USER>:<PASSWORD>@<HOST>/<DATABASE>")

После этого можно начинать логирование!

logger.LogInfo("Logging info here")
logger.LogDebug("Logging debuging here")
logger.LogError("Logging errors here")

Вот как выглядит результат в базе данных:

В классе нет ничего сложного. Для его инициализации требуется имя приложения и строка подключения. После предоставления вы можете использовать любой уровень ведения журнала, который вам нужен. Затем класс вставит эти журналы в соответствующие таблицы.

Улучшения

Подумав о некоторых способах улучшить это, было бы неплохо создать API (интерфейс прикладного программирования), который бы интегрировался с классом Python. Преимущество заключается в том, что любое приложение сможет использовать эту базу данных журналов. Это может показаться мне лицемерным, но вывод ошибок подключения к базе данных в файл был бы очень полезен. Таким образом, у вас будет некоторое представление о том, почему журналы не вставляются в базу данных.

Одна часть, которую я не рассмотрел в этой статье, - это создание классов таблиц. В нашем примере выше это был файл log_models. Эти классы необходимы для правильной работы SQLAlchemy. Это довольно простая задача, и вы узнаете о них больше здесь. Стоит отметить, что для этих классов таблиц требуется отдельная строка подключения. Было бы удобнее передавать эту строку подключения через класс только один раз. Нам нужно будет найти способ передать его как через файл классов ведения журнала, так и через файл классов таблиц. Было бы еще правильнее, если бы эти строки подключения были переменной среды.

Заключение

В заключение отметим, что этот класс ведения журнала и таблицы - это просто что-то простое для начала. Это ни в коем случае не конечный продукт. Не стесняйтесь вносить любые улучшения, которые вам нравятся! Кроме того, я был бы более чем счастлив услышать любые предложения, которые могут быть у вас для класса, или если у вас есть другой способ ведения журнала, который не требует вывода в файл. Удачной регистрации и ура!