Winston: как одновременно войти в консоль и системный журнал?

Я люблю Winston и использую его во всех своих проектах. Теперь мне нужно войти на сервер системного журнала в одном из моих приложений. Я подумал: "Нет проблем. У Winston есть для этого транспорт. Легко!"

Но я нашел проблему. Уровни журнала между npm (консоль) и системным журналом несовместимы. Пример:

В моем приложении я настроил свои журналы (в основном) следующим образом

// To use syslog stuff. Commented out for the initial example
//winston.setLevels(winston.config.syslog.levels);

// Console logging should have timestamps which are off by default
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console, {timestamp: true});

// Add my syslog transport
winston.add(
    winston.transports.Syslog,
    {
        level: 'info',
        host: config.app.syslog.host,
        facility: config.app.syslog.facility,
        json: false
    }
));

На данный момент все, что касается моего ведения журнала консоли, отлично. я могу

winston.info('Info');
winston.error('Error');

и я получаю 2 журнала консоли.

Но когда я раскомментирую часть winston.setLevels(winston.config.syslog.levels);, чтобы правильно использовать уровни системного журнала, я больше не получаю никакого вывода в winston.error('Error').

«Хмммм», — подумал я. «Возможно, проблема в том, что мой уровень журнала установлен на« информация », потому что уровни info и error инвертированы в своем порядке между сопоставлениями npm и syslog, и, возможно, Winston рассматривает только увеличение уровней журнала».

  value  |  npm level  |  syslog level
---------+-------------+----------------
    0    |  silly      |  emerg
    1    |  debug      |  alert
    2    |  verbose    |  crit
    3    |  INFO       |  ERROR
    4    |  warn       |  warning
    5    |  ERROR      |  notice
    6    |             |  INFO
    7    |             |  debug

Вооружившись этой теорией, я поставил level: error и попробовал еще раз. И снова тот же результат.

Кто-нибудь заставил это работать, чтобы я мог просто

var logger = require('winston');
logger.info('Info');
logger.error('Error');

в любых модулях, которые мне нравятся после первоначальной настройки? Каждый вызов журнала должен записывать в мою консоль И в мой системный журнал.


person Eric Olson    schedule 14.08.2015    source источник


Ответы (1)


Транспорты также должны быть созданы с пользовательскими уровнями (уровнями системного журнала). Консольный транспорт создается до того, как вы добавите пользовательские уровни. У вас может быть больше шансов с этим кодом:

logger = new winston.Logger({
  levels: winston.config.syslog.levels,
  colors: winston.config.syslog.colors
});
logger.add(winston.transports.Console);
person Offirmo    schedule 26.02.2016