如何在 Node.JS 中使用 Winston 格式化错误日志?
How do I format error logs with Winston in Node.JS?
我有一个 Node.js 应用程序,它使用 Winston for logging. I am printing my logs using printf 像这样:
winston.createLogger({
level: 'debug',
format: winston.format.combine(
winston.format.timestamp({ format: 'HH:mm:ss.SSSSS'}),
winston.format.printf(log => `[${log.level}] [${log.timestamp}] ${log.message} `)
),
transports: []
});
除了“错误”日志的情况外,这工作正常。当日志的日志级别为 'error' 时,日志会写入一个格式如下的条目:[${log.level}] [${log.timestamp}] ${log.message}${error.message}
。请注意,日志消息和错误消息之间没有 space。
如果日志级别为错误,如何在日志消息和错误消息之间放置 space?
自 documentation 起,winton 仅支持用于 info
日志记录的 format
参数。
虽然这是事实,但默认情况下 winston
仅支持级别 info
的格式设置。但是,您可以编写自己的 format
函数。请参阅下面的示例。
const { combine, timestamp, label, printf } = winston.format;
const myFormat = printf(info => {
// This will customize the Error Message
if(info instanceof Error) {
return `${info.timestamp} [${info.label}] ${info.level}: ${info.message} ${info.stack}`;
}
return `${info.timestamp} [${info.label}] ${info.level}: ${info.message}`;
});
winston.createLogger({
level: "info",
format: combine(
winston.format.splat(),
label({ label: filename}),
timestamp(),
myFormat,
),
transports: [
new winston.transports.File({ filename: path.join(os.tmpdir(), "test", "test.log"), level: "info" }),
],
});
我有一个 Node.js 应用程序,它使用 Winston for logging. I am printing my logs using printf 像这样:
winston.createLogger({
level: 'debug',
format: winston.format.combine(
winston.format.timestamp({ format: 'HH:mm:ss.SSSSS'}),
winston.format.printf(log => `[${log.level}] [${log.timestamp}] ${log.message} `)
),
transports: []
});
除了“错误”日志的情况外,这工作正常。当日志的日志级别为 'error' 时,日志会写入一个格式如下的条目:[${log.level}] [${log.timestamp}] ${log.message}${error.message}
。请注意,日志消息和错误消息之间没有 space。
如果日志级别为错误,如何在日志消息和错误消息之间放置 space?
自 documentation 起,winton 仅支持用于 info
日志记录的 format
参数。
虽然这是事实,但默认情况下 winston
仅支持级别 info
的格式设置。但是,您可以编写自己的 format
函数。请参阅下面的示例。
const { combine, timestamp, label, printf } = winston.format;
const myFormat = printf(info => {
// This will customize the Error Message
if(info instanceof Error) {
return `${info.timestamp} [${info.label}] ${info.level}: ${info.message} ${info.stack}`;
}
return `${info.timestamp} [${info.label}] ${info.level}: ${info.message}`;
});
winston.createLogger({
level: "info",
format: combine(
winston.format.splat(),
label({ label: filename}),
timestamp(),
myFormat,
),
transports: [
new winston.transports.File({ filename: path.join(os.tmpdir(), "test", "test.log"), level: "info" }),
],
});