我希望我的所有日志都有一个前缀,表示日志的来源。 这种方式为同一个文件创建了多个传输,这显然是一个
var config = require('config')
var winston = require('winston')
var loggers = {}
function getLogger(moduleName) {
if (!loggers[moduleName]) {
loggers[moduleName] = createNewLogger(moduleName)
}
return loggers[moduleName]
}
function createNewLogger(moduleName) {
var logger = new winston.Logger()
//https://github.com/winstonjs/winston/blob/master/docs/transports.md#console-transport
logger.add(winston.transports.Console,
{
colorize: true,
timestamp: true,
label: moduleName,
level: config.get('log.level')
}
)
logger.add(winston.transports.DailyRotateFile,
{
filename: config.get('log.filename'),
level: config.get('log.level')
}
)
return logger
}
module.exports = getLogger
我基本上希望我的所有日志都放在一个文件/控制台中,但前缀不同。 有任何想法吗?
我相信你想要这个: https ://github.com/winstonjs/winston#working -with-multiple-loggers-in-winston
谢谢你! 我以前见过它,但我的印象是正在为每个记录器重新创建传输。
例如下面的代码:
function getLogger(moduleName) {
console.log('Initializing logger for: ' + moduleName)
winston.loggers.add(moduleName, {
//https://github.com/winstonjs/winston/blob/master/docs/transports.md#console-transport
Console: {
colorize: true,
timestamp: true,
label: moduleName,
level: config.get('log.level')
},
DailyRotateFile: {
filename: config.get('log.filename'),
level: config.get('log.level')
}
})
return winston.loggers.get(moduleName)
}
会给Error: Transport already attached: console
我做错了什么?
嘿@indexzero ,
我在温斯顿3.0.0
。
我也试过这个,不确定这是否正确; 基本上,我想要一种更简单的方法来为每个日志消息添加前缀,或者根据正在记录的模块/功能为每个日志附加一个默认字段(对于某些结构)。 这是代码(通过文档中的示例进行):
const loggers = {};
module.exports.getModuleLogger = (moduleName, methodName) => {
const categoryName = [moduleName, methodName].join(':');
if (!loggers[categoryName]) {
loggers[categoryName] = winston.loggers.add(categoryName, {
console: {
label: categoryName,
},
file: {
filename: './log/test.log',
label: categoryName,
},
});
}
return winston.loggers.get(categoryName);
};
但我收到以下警告:
[winston] Attempt to write logs with no transports {"message":"yolo","
level":"info"}
您可以通过在日志函数的参数中添加一个包含字段“标签”的对象来实现此目的,例如:
对于以下格式:
常量 imLogFormat = printf(info => {
返回${info.timestamp} [${info.label}] ${info.level}: ${info.message}
;
});
您可以执行以下操作:
logger.error('我有以下错误' + err, {label: "Class1"})
logger.error('我有以下错误' + err, {label: "Class2"})