![](/img/trans.png)
[英]Why do my module cloud logger logs not appear in Google Cloud Logging?
[英]Structured Logs in Google Cloud Run not being parsed (using Winston for logging)
我正在尝试以 Google Cloud 正确提取日志级别的方式格式化我的日志。 这是在 Cloud Run 上运行的,带有 typescript。Cloud Run 正在从容器 output 中抓取日志。
如果我执行以下操作,谷歌将正确解析日志行:
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 日志中得到这个:
任何帮助表示赞赏。
原来我很接近,只需要 to.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,仅打印消息,严重性应为调试。 OP 提供的答案可以满足要求。
对于可能与我一样困惑的其他人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.