使用 winston.js 和 node.js 自定义消息格式
Customize messages format using winston.js and node.js
我在我的 nodejs 项目中使用 winston.js,我正在寻找的是将两个不同的自定义消息输出到不同类型的传输(控制台、文件)中。
控制台模式:
return `${timestamp} [${label}] ${level}: ${message}
文件模式(在文件中我只想显示消息和级别):
return ` ${level} : ${message}
这是我的代码:
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;
const myFormat = printf(({ level, message, label, timestamp }) => {
return `${timestamp} [${label}] ${level}: ${message}`;
}
});
const logger = createLogger({
format: combine(
label({ label: 'hello |' }),
timestamp(),
myFormat
),
transports: [new transports.Console(),
new transports.File({
filename: api.log,
level: 'info'
})
]
});
logger.stream = {
write: function(message, encoding) {
logger.info(message);
},
};
module.exports = logger;
使用这段代码我有相同的输出,请帮忙?
来自 Winston.js ver3 on Transport 接受格式
为了使不同的输出具有不同的日志格式,您需要创建不同的格式对象并将它们传递给您的传输构造函数。
所以在你的情况下:
- 您已经为
${timestamp} [${label}] ${level}: ${message}
创建了 myFormat,而不是将其传递给 createLogger
,您需要将其传递给 Console
构造函数。
- 您需要为
${level} : ${message}
创建另一个 Format
- 将
Format
传递给 File
传输构造函数 format
属性
您可以在 winston.js 项目源中看到将不同格式传递给控制台的示例:
https://github.com/winstonjs/winston/blob/master/examples/quick-start.js
我在我的 nodejs 项目中使用 winston.js,我正在寻找的是将两个不同的自定义消息输出到不同类型的传输(控制台、文件)中。 控制台模式:
return `${timestamp} [${label}] ${level}: ${message}
文件模式(在文件中我只想显示消息和级别):
return ` ${level} : ${message}
这是我的代码:
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;
const myFormat = printf(({ level, message, label, timestamp }) => {
return `${timestamp} [${label}] ${level}: ${message}`;
}
});
const logger = createLogger({
format: combine(
label({ label: 'hello |' }),
timestamp(),
myFormat
),
transports: [new transports.Console(),
new transports.File({
filename: api.log,
level: 'info'
})
]
});
logger.stream = {
write: function(message, encoding) {
logger.info(message);
},
};
module.exports = logger;
使用这段代码我有相同的输出,请帮忙?
来自 Winston.js ver3 on Transport 接受格式
为了使不同的输出具有不同的日志格式,您需要创建不同的格式对象并将它们传递给您的传输构造函数。
所以在你的情况下:
- 您已经为
${timestamp} [${label}] ${level}: ${message}
创建了 myFormat,而不是将其传递给createLogger
,您需要将其传递给Console
构造函数。 - 您需要为
${level} : ${message}
创建另一个Format
- 将
Format
传递给File
传输构造函数format
属性
您可以在 winston.js 项目源中看到将不同格式传递给控制台的示例: https://github.com/winstonjs/winston/blob/master/examples/quick-start.js