我的记录器设置如下:
const myFormat = printf(info => {
return `${info.timestamp}: ${info.level}: ${info.message}: ${info.err}`;
});
const logger =
winston.createLogger({
level: "info",
format: combine(timestamp(), myFormat),
transports: [
new winston.transports.File({
filename:
"./logger/error.log",
level: "error"
}),
new winston.transports.File({
filename:
"./logger/info.log",
level: "info"
})
]
})然后我记下一些错误,如下所示:
logger.error(`GET on /history`, { err });如何通过错误传输记录错误的完整堆栈跟踪?我试着传入err.stack,结果它是未定义的。
谢谢!
发布于 2019-10-21 01:53:01
对于winston版本的3.2.0+,下面会将堆栈跟踪添加到日志输出中:
import { createLogger, format, transports } from 'winston';
const { combine, timestamp, prettyPrint, colorize, errors, } = format;
const logger = createLogger({
format: combine(
errors({ stack: true }), // <-- use errors format
colorize(),
timestamp(),
prettyPrint()
),
transports: [new transports.Console()],
}); 参考:https://github.com/winstonjs/winston/issues/1338#issuecomment-482784056
发布于 2018-09-20 11:53:01
您可以编写一个格式化程序来将error.stack传递给日志。
const errorStackFormat = winston.format(info => {
if (info instanceof Error) {
return Object.assign({}, info, {
stack: info.stack,
message: info.message
})
}
return info
})
const logger = winston.createLogger({
transports: [ ... ],
format: winston.format.combine(errorStackFormat(), myFormat)
})
logger.info(new Error('yo')) // => {message: 'yo', stack: "Error blut at xxx.js:xx ......"} (输出将取决于您的配置)
发布于 2018-11-10 02:37:43
2021年1月14日更新-这在新版本的中不再起作用。
原始答案
@Ming的回答让我在一定程度上做到了这一点,但为了有一个带有错误的字符串描述,这就是我如何让完整的堆栈跟踪在我们的工作中工作的:
import winston from "winston";
const errorStackTracerFormat = winston.format(info => {
if (info.meta && info.meta instanceof Error) {
info.message = `${info.message} ${info.meta.stack}`;
}
return info;
});
const logger = winston.createLogger({
format: winston.format.combine(
winston.format.splat(), // Necessary to produce the 'meta' property
errorStackTracerFormat(),
winston.format.simple()
)
});
logger.error("Does this work?", new Error("Yup!"));
// The log output:
// error: Does this work? Error: Yup!
// at Object.<anonymous> (/path/to/file.ts:18:33)
// at ...
// at ...https://stackoverflow.com/questions/47231677
复制相似问题