繁体   English   中英

Google Cloud Run 中的结构化日志未被解析(使用 Winston 进行日志记录)

[英]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'
}));

日志 output 如下所示: 日志级别错误

我尝试了多种不同的方式来使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM