带有MongoDB的Winston记录器,如果有错误,它会保存在两个集合(错误日志和信息日志)上,它应该只保存在"errorLog"集合上



这是我的代码。如果电平:"0";信息";它只插入一个on(infoLog(集合,但如果级别:;错误";它是在两个集合(errorLog&infoLog(集合上插入的。如何解决此问题?

const { createLogger, format, transports } = require("winston");
const { combine, timestamp, prettyPrint } = format;
require("dotenv").config();
require("winston-mongodb");
const logger = createLogger({
format: format.combine(
format.timestamp({
format: "DD-MM-YYYY  HH:mm:ss Z ",
}),
format.json(),
format.metadata()
),
transports: [
new transports.Console(),
new transports.MongoDB({
level: "info",
db: "mongodb://localhost:27017/oos",
options: {
useUnifiedTopology: true,
},
collection: "infoLog",
}),
new transports.MongoDB({
level: "error",
db: "mongodb://localhost:27017/oos",
options: {
useUnifiedTopology: true,
},
collection: "errorLog",
}),
],
});
module.exports = logger;

这是控制台日志上显示的内容在此处输入图像描述

{"level":"error","message":"(test@yahoo.com) Invalid Credential & User Not Found!!! ","timestamp":"30-09-2022  11:30:01 +08:00 "}

保存了采集数据errorLog集合信息日志收集

{
"_id" : ObjectId("633662b98435813e681353e7"),
"timestamp" : ISODate("2022-09-30T11:30:01.056+08:00"),
"level" : "error",
"message" : "(test@yahoo.com) Invalid Credential & User Not Found!!! ",
"meta" : {
"timestamp" : "30-09-2022  11:30:01 +08:00 "
}

}

这是记录器:

logger.error(`(${email}) Invalid Credential & User Not Found!!! `);

我在https://betterstack.com/community/guides/logging/how-to-install-setup-and-use-winston-and-morgan-to-log-node-js-applications/#configuring-winston 中的传输

可能是这个:

const errorFilter = winston.format((info, opts) => {
return info.level === 'error' ? info : false;
});
const infoFilter = winston.format((info, opts) => {
return info.level === 'info' ? info : false;
});
const logger = winston.createLogger({
level: 'info',
transports: [
new transports.MongoDB({
level: "error",
db: "mongodb://localhost:27017/oos",
options: { useUnifiedTopology: true },
collection: "errorLog",
format: combine(errorFilter(), ...),
}),
new transports.MongoDB({
level: "info",
db: "mongodb://localhost:27017/oos",
options: { useUnifiedTopology: true },
collection: "infoLog",
format: combine(infoFilter(), ...),
}),
],
});

也许你也可以试试这个:

const collectionName = winston.collection((info, opts) => {
return `${info.level}Log`;
});
new transports.MongoDB({
level: "info",
db: "mongodb://localhost:27017/oos",
options: {
useUnifiedTopology: true,
},
collection: collectionName(),
}),

最新更新