Логгер для NodeJS?
Прошёл год, написан и используется свой логгер. Ниже хочу описать причины и что получилось.
Требования поменялись и в настоящее время они отлично ложатся на идеологию 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
Graylog2 смотрели? graylog2.org/
Есть биндинги в том числе и для ноды