node.js - 为什么winston 在同一个错误中记录错误消息两次?
问题描述
编辑:显然这是winston的一个已知问题:https ://github.com/winstonjs/winston/issues/1739
我有一个节点服务器,它在文件中保存日志,一个 mongoDB 并在开发时在控制台中显示它们。
当我抛出错误时:
throw new Error("The error message.");
温斯顿按如下方式记录错误:
2020-02-24 12:20:19 - error: "The error message.The error message."
如您所见,消息字符串是重复的。为什么?我所有的日志都有相同的重复问题。
我尝试使用该格式,但无济于事。任何帮助表示赞赏!
我的代码:
const { createLogger, format, transports } = require("winston");
require("winston-mongodb");
require("express-async-errors");
// Manually throwing the exception will let winston handle the logging
process.on("unhandledRejection", (ex) => {
throw ex;
});
// Log to files
const logger = createLogger({
level: "verbose",
format: format.combine(
format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
format.errors({ stack: true }),
format.splat(),
format.json()
),
transports: [
new transports.File({filename: "./logs/combined.log", level: "verbose"}),
],
transports: [
new transports.File({filename: "./logs/error.log", level: "error"}),
new transports.File({filename: "./logs/combined.log"}),
],
exceptionHandlers: [
new transports.File({ filename: "./logs/exceptions.log" }),
new transports.File({ filename: "./logs/combined.log" }),
],
handleExceptions: true,
});
// Log to database
logger.add(new transports.MongoDB({
db: "mongodb://localhost:27017/rest-api-mongodb",
options: {
useUnifiedTopology: true,
useNewUrlParser: true,
},
metaKey: "stack",
}));
// This is used to make the console logging more readable
// Enabled only in development
if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === undefined) {
const consoleFormat = format.printf(function(info) {
//console.log(info);
return `${info.timestamp} - ${info.level}: ${JSON.stringify(info.message, null, 4)}`;
});
logger.add(new transports.Console({
format: format.combine(
format.colorize(),
format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}), consoleFormat),
level: "debug",
handleExceptions: true,
colorize: true,
prettyPrint: true
}));
}
module.exports = logger;
解决方案
在调用winston.error 时,不要只传递错误对象的两个参数:例如winston.error(err)。
推荐阅读
- javascript - 带有 JavaScript 的 For-Loop,得到 1 个不在循环中的 inc 编号
- python - 循环遍历熊猫数据框并应用条件的正确方法是什么?
- javascript - 节点js中的动态导出变量
- json - 创建动态 json
- groovy - groovy.lang.MissingPropertyException:没有这样的属性:类的basePath:Apache jmeter中的Script466
- javascript - 我很难开玩笑地测试其他模式
- java - 如何处理具有不同属性的类以在网页中动态显示
- android - AlertDialog RecyclerView 隐藏确定/取消按钮
- entity-framework - 通过在 EntityFramework Effort 中仅使用部分数据库来加快测试速度
- javascript - Angular:如何在列宽更改时隐藏/显示元素并更改弹出框的数据?