Нет никаких сомнений в том, что необработанные данные должны быть преобразованы в осмысленный формат и извлечены ценные сведения. Действительно, это верно и для нашего серверного программирования. Существует много причин для записи информации в журнал, и одной из них может быть такой случай, когда ваш сервер уведомлений поздно отвечает клиенту, или вы можете захотеть проанализировать процентное соотношение различных типов запросов или нагрузки для каждого маршрута.

В этой статье я проливаю свет на то, как собирать значимые данные для запросов, сделанных вашим клиентом, и ответов, отправленных обратно клиенту. На этой игровой площадке моя цель — создать простой и удобный поток записи для вашего сервера NodeJS, а также регистрировать каждый запрос и ответ в файле в формате JSON.

Теперь в этой статье предполагается, что у вас есть предварительные знания о том, как запустить сервер NodeJS, Javascript и интерфейс командной строки.

Чтобы получить выгоду от модуля «буньян»; нам нужно установить с помощью следующей команды через диспетчер пакетов узла.

```

npm установить баньян

или если вы хотите установить глобально, введите следующее:

npm установить -g баньян

```

Это создаст node_modules в вашем рабочем каталоге и установит необходимые зависимости.

Теперь давайте создадим экземпляр bunyan и воспользуемся методом createLogger.

узел index.js

Это выведет на консоль следующий вывод:

И, как вы можете видеть, bunyan будет регистрировать имя для каждого журнала, конкретное «прекрасное сообщение журнала», а также дату в формате ISO, номер версии, уровень и другую информацию о хост-компьютере.

Обратите внимание, что это вывод консоли.

Но «буньян» сам по себе предоставляет интерфейс командной строки, и почему бы не получить от него все преимущества?

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

«старт»: «узел index.js | баньян”

Труба | Команда инициализирует bunyan CLI, и если вы наберете npm start, вы увидите следующий вывод.

Давайте создадим HTTP-сервер и создадим файл журнала для каждого запроса и ответа.

Строительный блок экземпляра регистратора bunyan будет находиться в другом файле в виде модуля. Здесь, в файле server.js, мы импортируем модуль.

Я создам функцию регистратора bunyan в виде другого модуля, как упоминалось выше, чтобы быть более модульным и писать чистый код. Для самого метода bunyan createLogger требуется объект с ключами, и если я хочу записать в файл, мне нужно добавить поток и местоположение файла.

Давайте запустим сервер, просто набрав «node server» и отправив несколько запросов.

Наш сервер запущен и ожидает запроса от клиента.

Вы можете использовать свой любимый браузер или инструмент, такой как Postman, для отправки запроса. Так как мы начали нашу подачу на нашей собственной локальной машине; имя хоста - localhost, как и ожидалось.

Теперь сервер присылает мне ответ, в котором говорится: «Мне тоже нужен кофе…»

Но где наши журналы?

Экземпляр журнала теперь создал поток записи и записал данные по заданному пути.

Давайте изменим функциональность нашего регистратора и будем регистрировать информацию из запросов и ответов.

Здесь нам нужно немного изменить сериализатор. Прежде всего, bunyan принимает стандартные сериализаторы, такие как:

const log = bunyan.createLogger({
    name: 'standart output stream',
    serializers: bunyan.stdSerializers
});

или конкретный объект запроса:

const log = bunyan.createLogger({
    name: 'My Bunyan handles request itself',
    serializers: {req: bunyan.stdSerializers.req}
});

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

Вот окончательная реализация;

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

Пришло время отправить еще несколько запросов, и давайте вместе рассмотрим каждую запись.

Что еще мы можем сделать с «буньяном»?

Мы можем создавать уровни журналов, такие как ERROR, и записывать каждый журнал ошибок в отдельный файл.

Мы можем создать временной интервал таким образом, чтобы файлы журналов каждый день увеличивались на единицу.

Мы можем использовать bunyan CLI вместо вывода с помощью console.log.

… и многое другое зависит от вашего воображения и варианта использования.

Спасибо за чтение.