2016-08-18 4 views
1

Вот основной Winston регистратор Я настроил:Создайте свой собственный Winston регистратор файлы

var winston = require('winston') 

var systemLogger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.File)({ 
     name: 'system-file', 
     // log which stores all the errors 
     filename: './test.log', 
     json: true, 
     timestamp: true 
    }) 
    ] 
}) 

systemLogger.log('info', 'hello') 
systemLogger.log('error', '-----hello2') 

Это создает файл журнала, как это:

{"level":"info","message":"hello","timestamp":"2016-08-18T11:48:22.081Z"} 
{"level":"error","message":"-----hello2","timestamp":"2016-08-18T11:48:22.083Z"} 

Но я хотел бы, чтобы это выглядело как это в файле:

INFO: 2016-08-18T11:48:22.081Z hello 
ERROR: 2016-08-18T11:48:22.083Z *** -----hello2 *** 

Возможно ли это?

Я прочел это - https://github.com/winstonjs/winston#custom-log-format, но я не могу найти, как это сделать - если возможно вообще.

Я попытался добавить форматчик:

formatter: function(options) { 
    // Return string will be passed to logger. 
    if (options.level === 'error') { 
     return options.timestamp() +' ******** '+ options.level.toUpperCase() +' ******** '+ (undefined !== options.message ? options.message : '') 
    } 
    else if (options.level === 'info') { 
     return options.timestamp() +' '+ options.level.toUpperCase() +' '+ (undefined !== options.message ? options.message : '') 
    } 
    } 

Однако это только кажется, работает для консольных отпечатков, а не файл. Так как файл сохраняет то же самое, что и без форматирования.

+0

В моем ответе есть примеры как для файла, так и для консоли. – Tiago

ответ

0

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

formatter: function(options) { 
     // Return string will be passed to logger. 
     return options.timestamp() +' '+ options.level.toUpperCase() +' '+ (undefined !== options.message ? options.message : '') + 
      (options.meta && Object.keys(options.meta).length ? '\n\t'+ JSON.stringify(options.meta) : ''); 
     } 

Таким образом, вышеуказанный форматтер будет печатать временную метку сначала, а затем уровень журнала, а затем фактическое сообщение, которое вы регистрируете.

Надеется, что это помогает ....

+0

Я пробовал это, но файл не сохраняется правильно. Проверьте обновленный вопрос –

0

Вам нужно создать функцию форматирования:

$ cat logger.js 
var winston = require('winston'); 

module.exports = (function(){ 

    function formatter (args){ 
      var timestamp = new Date().toISOString(), 
       level = args.level.toUpperCase(), 
       message = args.message; 

     return level+": "+timestamp+" "+message ; 
    } 

    return new (winston.Logger)({ 
     transports: [ 
      new (winston.transports.Console)({ 
       formatter: formatter, 
      }), 

      new (winston.transports.File)({ 
       formatter: formatter, 
       filename : "./logs/custom-logger.log", 
       maxsize : 1024 * 1024 * 500, 
       maxFiles : 10, 
       json : false, 
       tailable : true, 
      }) 
     ] 
    }); 
}()); 
0

Все, что вам нужно сделать, это добавить следующее: json : false

Так выглядит следующим образом:

var winston = require('winston') 

var systemLogger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.File)({ 
     name: 'system-file', 
     json : false, 
     // log which stores all the errors 
     filename: './test.log', 
     json: true, 
     timestamp: true 
    }) 
    ] 
}) 

Вы были близки, здорово!

 Смежные вопросы

  • Нет связанных вопросов^_^