如何使用@google-cloud/logging 发送带有文本消息和 JSON 负载的单个日志条目?

How to send a single log entry with a text message and a JSON payload using @google-cloud/logging?

按照此 tutorial 和其他一些文档,我有这段代码,就将日志发送到我的项目的 Cloud Logging 而言,它运行良好:

testLogging.ts

import { Logging } from "@google-cloud/logging";

const PROJECT_ID = "MY_PROJECT_ID";
const REGION = "MY_REGION";
const SERVICE_NAME = "MY_SERVICE_NAME";

const logging = new Logging({ projectId: PROJECT_ID });
const logName = "my-logs"; 
const log = logging.log(logName);

const resource = {
  type: "cloud_run_revision",     // I'M LOGGING FOR A CLOUD RUN CONTAINER
  labels: {
    service_name: SERVICE_NAME,
    location: REGION,
    project_id: PROJECT_ID,
    revision_name: "",
    configuration_name: ""
  }
};

const text_msg = `MY ERROR MSG`;
const json_payload = { foo: "bar" };

const text_entry = log.entry(
  { resource,  severity: "ERROR" },
  text_msg
);

const json_entry = log.entry(
  { resource,  severity: "ERROR" },
  json_payload 
);

log.write(text_entry);
log.write(json_entry);

他们正在工作。这正在记录中:

但到目前为止我只能单独记录它。我想发送一个带有文本消息和 JSON 负载的日志条目。我该怎么做?

参考文献:

测试后更新

这个版本是我测试过的并且可以正常工作,所以看看你是否可以根据你的需要调整它。

const {Logging} = require("@google-cloud/logging");

const PROJECT_ID = "PROJECT_ID";
const REGION = "REGION";
const SERVICE_NAME = "MY_SERVICE_NAME";
const KEYFILE_PATH = "keyfile.json";

const logging = new Logging({ projectId: PROJECT_ID, keyFile: KEYFILE_PATH, fallback: false });
const logName = "my-log";
const log = logging.log(logName);

const resource = {
    type: "cloud_run_revision",     // I'M LOGGING FOR A CLOUD RUN CONTAINER
    labels: {
        service_name: SERVICE_NAME,
        location: REGION,
        project_id: PROJECT_ID,
        revision_name: "",
        configuration_name: ""
    }
};

const text_msg = `MY ERROR MSG`;
const json_payload = { foo: "bar" };

// The metadata associated with the entry
const metadata = {
    resource,
    severity: 'ERROR',
    textPayload: text_msg,
    jsonPayload: json_payload
};

// Prepares a log entry
const entry = log.entry(metadata);

async function writeLog() {
    await log.write(entry);
    console.log('Logged!');
}

writeLog();

这导致:


原版Post

entry()函数接受multiple configurations, try dropping the second parameter and just passing it all in the metadata.

  log.entry({
    resource,
    severity: "ERROR",
    jsonPayload: json_payload,
    textPayload: text_payload
  });

在@BrianBurton 和他的回答的帮助下,我找到了一种方法:

LogEntry reference doc,我们看到有效载荷必须是 以下之一: protoPayloadtextPayloadjsonPayload.

但我刚刚发现,如果您将 message 字段添加到 jsonPayload 对象,它将显示为错误或日志消息。

例如:

const json_payload = { message: "SOMETHING HAPPENED", foo: "bar" };

const json_entry = log.entry(
  { resource,  
    severity: "ERROR",
  },
  json_payload
);

log.write(json_entry);

结果: