Как мы прокачали логирование в Node.js

OpenSource кубики Byndyusoft™ пополнились библиотекой pino-logger-factory для настройки nestjs-pino , который мы используем для логирования. В честь этого события хотим предложить вам небольшое объяснение конфигурации по умолчанию на примере эволюции одного лога.
12 Factor учит нас тому, что логи должны быть в JSON формате и выводиться в stdout приложения:

В этом логе мы понимаем что произошло и когда, но нам катастрофически не хватает доп. информации о самом сервисе:
- pid и hostname процесса
- Имя сервиса, его версия и окружение в котором он запущен
- Идентификатор места в программе, где была сделана запись в лог

Если будет несколько логов в рамках одного запроса, то их нужно связать общим контекстом:
- ID запроса
- ID трассировки (например Jaeger)

Одинаковых логов может быть очень много, поэтому нам важно уметь их отличать:
- По хешу шаблона сообщения
- По хешу ошибки

В заключении для большей уверенности в том, что сейчас работает нужная версия приложения можно логировать информацию из CI/CD:
- Ветка и/или тег
- Короткий хеш коммита
- Номер сборки

Следите за новыми репозиториями и обновлениями текущих на нашем https://github.com/Byndyusoft.