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