2017-03-03 14 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] ...」「[Name2] ...」などのようなものが表示されるように「名前」を設定できるようにしたいと考えています。

どうすればいいですか?

答えて

0

ウィンストンの概念は「categories」です。しかし、カテゴリ名をログメッセージに入れるのは簡単な方法ではありません。ですから、getLoggerをエクスポートするだけではなくwinston、その後、あなたはこれらのようなログメッセージを取得します

'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');

:ここ

は、これを達成するには「ラベル」プロパティを活用する回避策です。

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もここにあります。

関連する問題