2016-11-09 2 views
1

У меня есть два различных лесорубов Winston, которые выглядят, как это (есть два отдельных из них, как они пишут различные журналы в зависимости от своих функций) -:Winston регистратор для записи в два файла

var security = new(winston.Logger)({ 
    transports: [ 
     new(require('winston-daily-rotate-file'))({ 
      filename: logDir + '/-security.log', 
      datePattern: 'dd-MM-yyyy', 
      prepend: true, 
      json: false, 
      timestamp: function() { 
       return moment().format('D/MM/YYYY HH:mm:ss:SSS'); 
      } 
     }) 
    ] 
}); 

И тогда я один еще:

var system = new(winston.Logger)({ 
    transports: [ 
     new(require('winston-daily-rotate-file'))({ 
      filename: logDir + '/-security.log', 
      datePattern: 'dd-MM-yyyy', 
      prepend: true, 
      json: false, 
      timestamp: function() { 
       return moment().format('D/MM/YYYY HH:mm:ss:SSS'); 
      } 
     }) 
    ] 
}); 

Тем не менее, у меня также есть verbose.log файл, в котором я хочу все журналы из файла журнала безопасности и системы должны быть записаны в многословным тоже. Каков наилучший способ сделать это?

Я попытался добавить имя файла (т.е. verbose.log) к каждому из транспортов, но это не работает, как я получаю ошибку

Error: Transport already attached: dailyRotateFile, assign a different name 

ответ

0

Это общая проблема с Уинстоном, но простой решать.
Из-за того, как Winston закодирован, он не может differenciate ваших двух транспорт себя, и нужно, чтобы вы явно объявить их как отдельные, давая им различные названия:

var security = new(winston.Logger)({ 
    transports: [ 
     new(require('winston-daily-rotate-file'))({ 
//=> 
      name: 'foo', 
//<= 
      filename: logDir + '/-security.log', 
      datePattern: 'dd-MM-yyyy', 
      prepend: true, 
      json: false, 
      timestamp: function() { 
       return moment().format('D/MM/YYYY HH:mm:ss:SSS'); 
      } 
     }) 
    ] 
}); 

var system = new(winston.Logger)({ 
    transports: [ 
     new(require('winston-daily-rotate-file'))({ 
//=> 
      name: 'bar', 
//<= 
      filename: logDir + '/-security.log', 
      datePattern: 'dd-MM-yyyy', 
      prepend: true, 
      json: false, 
      timestamp: function() { 
       return moment().format('D/MM/YYYY HH:mm:ss:SSS'); 
      } 
     }) 
    ] 
}); 

Само название не имеет значения до тех пор, как это отличается, простой способ сделать это - использовать имя файла вместе с другим идентификатором для транспорта.

Источник: issue #101 of the official Github

EDIT:

var verbose = new(require('winston-daily-rotate-file'))({ 
    name: 'baz', 
    filename: logDir + '/-verbose.log', 
    datePattern: 'dd-MM-yyyy', 
    prepend: true, 
    json: false, 
    timestamp: function() { 
     return moment().format('D/MM/YYYY HH:mm:ss:SSS'); 
    } 
}) 

var security = new(winston.Logger)({ 
    transports: [ 
     new(require('winston-daily-rotate-file'))({ 
//=> 
      name: 'foo', 
//<= 
      filename: logDir + '/-security.log', 
      datePattern: 'dd-MM-yyyy', 
      prepend: true, 
      json: false, 
      timestamp: function() { 
       return moment().format('D/MM/YYYY HH:mm:ss:SSS'); 
      } 
     }), 
//=> 
     verbose 
//<= 
    ] 
}); 

var system = new(winston.Logger)({ 
    transports: [ 
     new(require('winston-daily-rotate-file'))({ 
//=> 
      name: 'bar', 
//<= 
      filename: logDir + '/-security.log', 
      datePattern: 'dd-MM-yyyy', 
      prepend: true, 
      json: false, 
      timestamp: function() { 
       return moment().format('D/MM/YYYY HH:mm:ss:SSS'); 
      } 
     }), 
//=> 
     verbose 
//<= 
    ] 
}); 
+0

Хорошая идея ... так так я позволяю два разных журналов, чтобы сохранить тот же файл. Тем не менее, я хочу иметь возможность сохранять отдельные события журнала в безопасности и в файлах системного журнала отдельно, но в то же время я хочу, чтобы они оба сохраняли события безопасности и системного журнала в подробном журнале. Имеет ли это смысл? – deeveeABC

+0

Вы можете объявить другой транспорт с 'loglevel: 'verbose', filename: 'verbose.log', name: 'baz'' и прикрепить его к обоим регистраторам – DrakaSAN

+0

См. Править для общего транспорта для двух регистраторов – DrakaSAN