【问题标题】:Node Winston instantiate each instance with a name节点 Winston 用名称实例化每个实例
【发布时间】:2017-07-24 01:19:54
【问题描述】:

这是我的温斯顿记录器类:

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] ...”等内容。

我该如何做到这一点?

【问题讨论】:

  • 请在下面标记为正确答案,我只是测试一下

标签: node.js winston


【解决方案1】:

Winston 有一个“categories”的概念。但是没有简单的方法将类别名称放入日志消息中。

这是利用“标签”属性实现此目的的解决方法:

'use strict';

const winston = require('winston');

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

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

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

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

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

	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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2012-05-03
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多