Нужно скопировать:
./src/services/context
- полностью сервис
./src/utils/loggerService
- полностью сервис
./src/middlewares{ init-async-context-middleware.js, logger-middleware.js }
После чего, в мидлварках нужно подкорректировать путь до сервиса для работы с контекстами, конфиг файлу и к логеру.
Также в логер сервисе в файле logger.js
нужно обновить путь к сервису по работе с контекстом и к конфиг файлу.
Ниже приведено описание ключевых файлов логера и сервиса по работе с контекстом.
Сервис по работе с контекстом приложения, это обертка над библиотекой
cls-hooked
, для удобной работы с парметрами и контектсами.
Содержит в себе базовые, общие методы и свойства для контекстов т.к. в теории можно создать несколько разных контекстов в одном приложении в течении одного уникального запроса.
Содержит в себе методы, свойства для удобной работы с конкретным контекстом, в данном случае контекст app
.
Cодержит в себе структуру, описание какие параметры существуют в контексте, хеддеры для трассировки при логировании. Очень удобно если хедер поменялся, то нужно только поменять его здесь в структуре контекста и все будет работать корректно.
В этом файле описана структура контекста app
. Если нужно добавить новый параметр в контекст, то нужно добавить его в структуру затем только использовать.
Здесь содержится 2 файла, которые достойны внимания(описаны ниже), остальные мидлварки стандартные, здесь скудно реализованы, только для возможности протестировать, как это работает в действительности.
Мидлварка, которая создает главный контекст приложения и записывает в него данные для трассировки запросов т.е. считывает нужные хедеры из входящего запроса и сохраняет их в контекст, если хедеры не были найдены, то генерирует свой traceID
с префиксом названия приложения, чтобы не потерять группу логов.
Содержит мидлварки для логирования входящих запросов, а также вносит правку в метод res.send()
для того, чтобы можно было залогировать тело response.body
т.к. в базе express
отсутствует такая возможность. Логирование сработает в тот момент, когда сервер отправит ответ клиенту. Также высчитывается время выполнения запроса и передается в логирование.
Cодержит в себе базовый логер и
http
логер.
Логер, обертка над winston, при должном желании можно поменять на любой другой логер с минимальными изменениями. Также в этом классе содержится метод для форматирования тела лога и здесь подключен сервис для получения параметров из контекста.
Кастомный http
логер, просто наследует главный класс логера и переопределяет некоторые методы, для передачи нужных параметров для формирования http
лога.