2016-11-09 73 views
1

我有一个看起来像这样(有两个独立的人,因为他们写这取决于我的功能不同的日志)两种不同的温斯顿记录器 - :温斯顿记录仪记录到两个文件

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

它与温斯顿一个共同的问题,但一个简单的,这并不工作解决。
由于温斯顿是如何编码的,它不能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

编辑:

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',文件名:'verbose.log',名称:'baz''来声明另一个传输器,并将其附加到两个记录器 – DrakaSAN

+0

请参阅编辑两个记录器的公共传输 – DrakaSAN