Найти тему
Chris Roylance

Разработка CMS на NodeJS. Часть 5. Логирование системы.

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

Начнем с выбора хранения логов. Для удобства чтения, поиска и дальнейшей обработки логов будет использоваться хранения в формате база данных. База данных предлагается в формате документориентованной nedb от seald-io.Все данные хранятся при этом в json-формате, что позволит просмотреть логи даже без сервера, просто открыв файл. Произведем установку данного пакета:

pnpm i @seald-io/nedb

Более подробно почитать о возможностях данной библиотеки можно на npm репозитории, https://www.npmjs.com/package/@seald-io/nedb .

Теперь сформируем концепцию применения логирования. Для логирования будет использоваться числовое значение обозначающие степень логирования. Значения будет 3, без логирования (значение 0), логирование запросов (значение 1), логирование полное (значение 2). Данные параметры будут задаваться через параметры приложения, при этом стандартное значение будет 1. В полное логирование будет так же прописываться каждый вызов функции и статус ее работы.

Перед тем как приступим к созданию файла с функциями для работы с логированием, нам необходим создать новый параметр командной строки --loglvl. Вместе с этим надо создать переменную logLvl с дефолтным значением в конфигурации. И нельзя забывать о функции получения информации о уровне логирования showLogLvl. Внесенные изменения предоставлены на скриншотах ниже:

Добавление loglvl в initArgs
Добавление loglvl в initArgs
Список параметров конфигурации
Список параметров конфигурации
Добавление loglvl в initConfig
Добавление loglvl в initConfig
Добавление функции showLogLvl и экспорта данной функции
Добавление функции showLogLvl и экспорта данной функции

Для удобства разработки и отлаживания всех компонентов в тип запуска приложения dev добавим еще параметр --loglvl=2.

Добавление уровня логирования в запуск dev приложения.
Добавление уровня логирования в запуск dev приложения.

Теперь приступим уже к непосредственно работы с системой логирования. В директории libs создадим файл logs.libs.js.

Структура проекта.
Структура проекта.

В данном файле произведен импорт библиотеки nedb, после чего произведем создание БД если ее не было ранее или произведем ее открытие. После этого произведем создание функции логирования.

Файл logs.libs.js и функция newLogs
Файл logs.libs.js и функция newLogs

Теперь в файле app.js произведем импортирование нашего logs.libs.js, а после этого произведем доработку запуска севрера. При запуске севрера будет проверяться какой уровень логирования, если больше 0, то будет производиться запись о запуске сервера на определенном порту, также добавим логирование информации о том, что сервер был запущен в режиме dev.

Импорт logs.libs.js
Импорт logs.libs.js
Доработка запуска сервера
Доработка запуска сервера

После запуска сервера появится новая директория logs, а в ней появится файо server.log.

Структура проекта после запуска сервера.
Структура проекта после запуска сервера.

Теперь перейдем в сам файле, как видете на скриншоте ниже, весь лог состоит из json объектов. Таким образом читаемость лога остается высокой даже без использования системы (далее мы реализуем возможность просматривать логи в веб-интерфейсе).

Лог-файл server.log
Лог-файл server.log

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

Подписывайтесь на наш телеграм канал (https://t.me/rebeltechru), в нем вы можете найти статьи по разработке и сами проекты.