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

时间:2019-09-23 04:08:45

标签: node.js typescript google-cloud-platform winston google-cloud-run

我正在尝试以使Google Cloud正确提取日志级别的方式格式化日志。这是使用Typescript在Cloud Run上运行的。 Cloud Run正在从容器输出中获取日志。

如果执行以下操作,则google会正确解析日志行:

console.log(JSON.stringify({
   severity: 'ERROR',
   message: 'This is testing a structured log error for GCP'
}));

日志输出如下所示: log level error

我尝试了多种不同的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日志中得到了它: enter image description here

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

结果证明我很接近,只需要.upperCase()日志级别(并且我正在映射Verbose->调试,我真的不明白为什么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());