Задать вопрос
mahnunchik
@mahnunchik
https://about.me/vlasenko

Логгер для NodeJS?

Друзья, не находил ли кто либо логгер для NodeJS, который отвечал бы следующим требованиям:


1) Форматированный вывод в файл (дата, тэг итд)

2) Возможность в будущем заменить файл лога на базу

3) Возможность отправки логов на другую машинку

4) Нотификации на почту/SNS по определённому уровню сообщений (например, если конект до базы пропал)


Тут идеально бы подходил syslog (в моём случае rsyslog), но…


Теперь проблема более развёрнуто:

1) Готовые решения тут, с которыми я успел ознакомился, сваливают задачу ведения лога на основной прецесс, что не оправдано.


Например winston, имеет кучу транспортов и форматирование и кучу плюшек, но это все делается в главном процессе приложения и проблемы лога приводят к проблемам приложения (это и вынудило к поиску более подходящего решения).

Плюс к этому у winston до недавнего времени была сломана совместимость с записью в файл и до сих пор сломана совместимость с syslog. (NodeJS 9+)


2) Сейчас приложение запускается с помощью forever, он перенаправляет в дочернем процессе стандартный вывод «воркера» в файлы, что снимает нагрузку и проблемы связанные с ведением лога. Но мы имеем только 3 файла логов и все, никакого анализа форматирование и нотификаций.


3) Можно было бы читать файлы форевера и сливать их в syslog (rsyslog умеет из коробки) но теряются уровни сообщений (error, info итд), соответственно никакой нотификации по ним.


4) Можно было бы писать в syslog сразу из основного процесса, но тут мы переходим к пункту 1 и проблемы ведения лога становятся проблемами приложения.


Обращаюсь за помощью к сообществу, вдруг кто находил решение или группу решений, так как сам уже в отчаянии=)
  • Вопрос задан
  • 21693 просмотра
Подписаться 15 Оценить Комментировать
Решения вопроса 1
mahnunchik
@mahnunchik Автор вопроса
https://about.me/vlasenko
Прошёл год, написан и используется свой логгер. Ниже хочу описать причины и что получилось.

Требования поменялись и в настоящее время они отлично ложатся на идеологию 12 factor app 12factor.net/logs

А именно: логгер и само приложение не занимаются записью лога ни в файл ни в базу. Никаких транспортов. Лог пишется только в stdout.

Мотивация:
1) Мы получаем отличный лог в консоле во время разработки просто запустив приложение. Без всяких "девелоперских" режимов транспортов.
2) В продакшене сбором и транспортом лога занимается то, что запускает наше приложение (forever, upstart, supervisor). Процесс транспортировки лога лежит не на самом приложении - это развязывает руки в использовании как своих сервисов агрегации логов (logstash), так и сторонних (loggly).
2) Как логгер, так и само приложение избавлены от багов "толстого" логгера и транспортов.

Требования к реализации:
1) Быстрый старт - возможность начать использовать логгер без первоначальной конфигурации
2) Пространства имен
3) Гибкость в настройке формата сообщений (которые мы пишем в stdout)

Вот так получился mag логгер

Быстрый старт
var logger = require('mag')();
logger.info('my great application is running!');


Пространства имен
var mag = require('mag');
var logger = mag('my-app');
logger.info('my great application is running');


Настройка формата сообщений.
Мы можем подключать mag сколько угодно раз, даже в подмодулях. Подключив один раз модуль mag-hub - все сообщения пойдут через него. mag-hub - это стрим в режими объектов. Мы можем читать из него и делать с объектами логов всё что угодно, записав потом в stdout конечно.

При написании подмодуля приложения о логировании заботиться также не нужно: https://github.com/mahnunchik/mag#for-module-developers

Ссылки:
1) mag logger
2) API логгера
3) Модуль агрегации логов в одном стриме mag-hub
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@thedeleteduser
Вообще, с логерами в ноде не очень. От винстона мы отказались давно, потому что он перестал развиваться, и разработчики не принимали даже готовые пул-реквесты.

В вашем списке вроде не было этого github.com/nomiddlename/log4js-node. Сейчас его используем. Но похоже там что-то завалилось на 0.6 версии под ноду v0.10. Либо стримы в десятке кривые. У меня процесс работает минут 15, а потом набирает памяти до максимума и ест всё ядро процессора. Откатились на предыдущую версию лога и ноды — там все без проблем.

Единственное что могу посоветовать — ищите пакет, где считаете вменяемой архитектуру и код, и дописывайте свои адаптеры под способы логирования.
Ответ написан
Tenkoff
@Tenkoff
github.com/fluent/fluentd подключите
Ответ написан
Комментировать
sajgak
@sajgak
Graylog2 смотрели? graylog2.org/
Есть биндинги в том числе и для ноды
Ответ написан
AlexPTS
@AlexPTS
Full stack веб разработчик
monolog
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы