Google Cloud 运行 中的结构化日志未被解析(使用 Winston 进行日志记录)
Structured Logs in Google Cloud Run not being parsed (using Winston for logging)
我正在尝试以 Google Cloud 正确提取日志级别的方式格式化我的日志。这是 Cloud 运行 上的 运行,使用打字稿。 Cloud 运行 正在从容器输出中抓取日志。
如果我执行以下操作,google 会正确解析日志行:
console.log(JSON.stringify({
severity: 'ERROR',
message: 'This is testing a structured log error for GCP'
}));
日志输出如下所示:
我尝试了多种不同的方式来使用 winston 格式化,结果如下:
useFormat = format.combine(
format((info, opts) => {
info['severity'] = info.level;
delete info.level;
return info;
})(),
format.json());
this.winston = winston.createLogger({
level: logLevel,
format: useFormat,
transports: [new winston.transports.Console()]
});
看起来它会工作(它正确输出 json 行),我在 GCP 日志中得到这个:
感谢任何帮助。
原来我很接近,只需要 .upperCase() 日志级别(我正在映射 Verbose -> Debug,我真的不明白为什么 GCP 决定做一个完全不同的日志级别系统其他所有人)。新代码:
useFormat =
format.combine(
format((info, opts) => {
let level = info.level.toUpperCase();
if(level === 'VERBOSE') {
level = 'DEBUG';
}
info['severity'] = level;
delete info.level;
return info;
})(),
format.json());
问题的最后一点令人困惑。 OP 指出的问题是 json 被打印出来并且严重性是默认的。 json 不应该被打印出来,只有消息,严重性应该是 debug。 OP 提供的答案符合要求。
对于可能和我一样困惑的其他人。
我正在尝试以 Google Cloud 正确提取日志级别的方式格式化我的日志。这是 Cloud 运行 上的 运行,使用打字稿。 Cloud 运行 正在从容器输出中抓取日志。
如果我执行以下操作,google 会正确解析日志行:
console.log(JSON.stringify({
severity: 'ERROR',
message: 'This is testing a structured log error for GCP'
}));
日志输出如下所示:
我尝试了多种不同的方式来使用 winston 格式化,结果如下:
useFormat = format.combine(
format((info, opts) => {
info['severity'] = info.level;
delete info.level;
return info;
})(),
format.json());
this.winston = winston.createLogger({
level: logLevel,
format: useFormat,
transports: [new winston.transports.Console()]
});
看起来它会工作(它正确输出 json 行),我在 GCP 日志中得到这个:
感谢任何帮助。
原来我很接近,只需要 .upperCase() 日志级别(我正在映射 Verbose -> Debug,我真的不明白为什么 GCP 决定做一个完全不同的日志级别系统其他所有人)。新代码:
useFormat =
format.combine(
format((info, opts) => {
let level = info.level.toUpperCase();
if(level === 'VERBOSE') {
level = 'DEBUG';
}
info['severity'] = level;
delete info.level;
return info;
})(),
format.json());
问题的最后一点令人困惑。 OP 指出的问题是 json 被打印出来并且严重性是默认的。 json 不应该被打印出来,只有消息,严重性应该是 debug。 OP 提供的答案符合要求。
对于可能和我一样困惑的其他人。