2017-03-03 30 views
1

這是我的溫斯頓記錄器類:節點溫斯頓實例化每個實例有一個名字

const winston = require('winston'); 
const config = require('../config'); 
const env = process.env; 

winston.setLevels({ 
    debug:0, 
    info: 1, 
    silly:2, 
    warn: 3, 
    error:4, 
}); 

winston.addColors({ 
    debug: 'green', 
    info: 'cyan', 
    silly: 'magenta', 
    warn: 'yellow', 
    error: 'red' 
}); 

let transports = []; 
transports.push(new (winston.transports.File)({filename: config.logger.fileName})); 
if (env.CONSOLE == 'true' || config.logger.consoleLog) { 
    transports.push(new (winston.transports.Console)({colorize:true})); 
} 

winston.configure({ 
    transports: transports 
}); 

if (config.logger.debug || env.DEBUG == 'true') { 
    winston.level = 'debug'; 
} 


module.exports = winston; 

我用這個像這樣:

const logger = require('src/logger'); 
logger.info("Hello there"); 

的問題是,那麼所有文件將追加到同一個文件沒有任何區別;我希望能夠設置「名稱」,以便在我的日誌,我看到類似「[NAME1] ...」「[名稱] ...」等等

如何做到這一點?

回答

0

溫斯頓擁有的 'categories' 的概念。但是沒有簡單的方法將類別名稱放入日誌消息中。

這裏是一個利用「標籤」屬性來實現這一解決方法:

'use strict'; 
 

 
const winston = require('winston'); 
 

 
winston.setLevels({ 
 
\t debug: 0, 
 
\t info: 1, 
 
\t silly: 2, 
 
\t warn: 3, 
 
\t error: 4, 
 
}); 
 

 
winston.addColors({ 
 
\t debug: 'green', 
 
\t info: 'cyan', 
 
\t silly: 'magenta', 
 
\t warn: 'yellow', 
 
\t error: 'red' 
 
}); 
 

 
const getLogger = function (category) { 
 
\t //If we call .get it'll create a default logger 
 
\t //We don't need a default one, we want to configure the 
 
\t //transports/labels, so we check if it exists 
 
\t //and return only if it's configured properly 
 
\t if (winston.loggers[category]) { 
 
\t \t return winston.loggers.get(category); 
 
\t } 
 

 
\t //Apply your logic to identify log level here. 
 
\t let level = 'silly'; 
 

 
\t //Set up the transports you need (omit console if needed) 
 
\t let transports = [ 
 
\t \t new (winston.transports.File)({ 
 
\t \t \t filename: './logs.txt', 
 
\t \t \t //Notice this 'label' property 
 
\t \t \t label: category, 
 
\t \t \t level 
 
\t \t }), 
 
\t \t new (winston.transports.Console)({ 
 
\t \t \t colorize: true, 
 
\t \t \t label: category, 
 
\t \t \t level 
 
\t \t }) 
 
\t ]; 
 

 
\t return winston.loggers.add(category, {transports}); 
 
}; 
 

 
module.exports = {getLogger}; 
 

 
const generalLogger = getLogger('general'); 
 
const appleLogger = getLogger('apple'); 
 
const orangeLogger = getLogger('orange'); 
 

 
generalLogger.log('info', 'general logger'); 
 
appleLogger.log('info', 'apple logger'); 
 
orangeLogger.log('info', 'orange logger');

所以你出口getLogger,而不是僅僅winston,然後你會得到喜歡登錄這些消息:

info: [general] general logger 
info: [apple] apple logger 
info: [orange] orange logger 

{"level":"info","message":"general logger","label":"general","timestamp":"2017-03-06T07:08:04.959Z"} 
 
{"level":"info","message":"apple logger","label":"apple","timestamp":"2017-03-06T07:08:04.962Z"} 
 
{"level":"info","message":"orange logger","label":"orange","timestamp":"2017-03-06T07:08:04.963Z"}

希望這會有所幫助。這裏還有一個similar thread