Уинстон пишет два документа об уровне ошибки в mongo db во время ведения журнала

Я использую winston для входа в свой проект nodejs. Я сохраняю журнал уровня ошибок в моей подключенной базе данных mongo. Ниже приведена моя конфигурация:

 logger = new (winston.Logger)({

  transports : [
                  new(winston.transports.MongoDB)({
                      name               : 'admin_log_error',
                      db                 : mongodbConfig.developmentUrl,
                      collection         : 'admin_log',
                      expireAfterSeconds : oneWeekInSeconds,
                      level              : 'error'
                  }),

                  new(winston.transports.MongoDB)({
                      name               : 'admin_log_warn',
                      db                 : mongodbConfig.developmentUrl,
                      collection         : 'admin_log',
                      expireAfterSeconds : oneWeekInSeconds,
                      level              : 'warn'
                  }),

                  new(winston.transports.MongoDB)({
                      name               : 'admin_log_debug',
                      db                 : mongodbConfig.developmentUrl,
                      collection         : 'admin_log',
                      expireAfterSeconds : oneWeekInSeconds,
                      level              : 'debug'
                  })

               ]
});

Вот как я это использую.

logger.log('error',message,metadata);

Но при проверке mongo db в коллекции admin_log всякий раз, когда есть журнал уровня ошибок, есть два дублирующихся документа. На уровне предупреждения или отладки такого нет. Как решить эту проблему, может кто сталкивался с подобной проблемой.


person Piyush Dhore    schedule 25.03.2017    source источник


Ответы (1)


В документации Winston говорится, что -

winston позволяет вам определить свойство уровня для каждого транспорта, которое определяет максимальный уровень сообщений, которые транспорт должен регистрировать.

По умолчанию приоритет отдается различным уровням:

{ error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5 }

Таким образом, если вы укажете уровень как error, то максимальный уровень сообщений, которые Winston будет регистрировать, будет 0. В результате все уровни со значением более 0 не будут регистрироваться, поэтому вы будете видеть только error журналы уровня.

Вместо этого, если вы укажете уровень журнала как info, тогда winston будет регистрировать все уровни, значение которых до 2, так как это значение для уровня info. В результате error, warn и info - Все 3 уровня будут записаны в этот логгер, так как их значение меньше или равно 2.

В вашем случае вы указали 3 регистратора с разными уровнями. Теперь, когда вы выполняете

logger.log('error',message,metadata);

Затем все 3 регистратора в вашей конфигурации имеют уровни, превышающие уровень error. В результате все три регистратора зарегистрируют это значение. Это у тебя проблема.

Надеюсь, это прояснит ситуацию.

person Jyotman Singh    schedule 25.03.2017
comment
Объяснит ли это, почему OP видит два документа? - person Vince Bowdren; 26.03.2017
comment
Ну, я попробовал код OP, прежде чем писать этот ответ. Я просто переключил транспорт на Console вместо MongoDB и смог создать три журнала. Кроме того, проблема, похоже, связана с пониманием концепции уровня журнала. Я уверен, что с этими знаниями ОП сможет исправить ошибки или вернуться к какой-либо другой проблеме, если таковая имеется. - person Jyotman Singh; 26.03.2017