2016-11-09 4 views
1

나는 (그들이 내 기능에 따라 서로 다른 로그를 작성할 때 두 개의 분리 된 사람이있다)과 같이 두 개의 서로 다른 윈스턴 로거가에 기록하기 이상 : 그러나윈스턴 로거는 두 개의 파일

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 ', filename :'verbose.log ', 이름 :'baz''로 다른 전송을 선언하고 두 로거에 첨부 할 수 있습니다 – DrakaSAN

+0

두 로거에 대한 공통 전송에 대한 편집 참조 – DrakaSAN