如何在 node.js 中从 AWS Lambda 将原始 JSON 记录到 Cloudwatch?
How to log raw JSON to Cloudwatch from AWS Lambda in node.js?
我有一些基于 node.js 的 Lambda 正在记录数据。
为了正确查询和过滤数据等,我想从我的 Lambdas 中记录为纯 JSON 数据。
但是,当我执行常规操作时 console.log
它会生成一个普通的数据字符串。
console.log({a:1,b:2,x:"xxx"})
结果:
2020-04-29T14:46:45.722Z 3f64c499-fbae-4a84-996c-5e5f0cb5302c INFO { a: 1, b: 2, x: 'xxx' }
上面记录的行似乎无法搜索,因为 JSON 使用 CloudWatch 中的各种过滤器匹配选项。
我尝试直接调用 AWS.CloudWatchLogs
API 但是因为我使用的是 lambda,所以我无法在函数调用之间维护一个标记,所以我不确定是不是这样去。
有没有其他人成功地从 Javascript Lambda 中记录原始 JSON?
问题是 console.log()
没有直接转到 stdout/stderr。你可以看到使用这个 Lambda:
const process = require('process');
exports.handler = async (event) => {
console.log("message 1");
process.stdout.write("message 2\n");
};
如果你调用它,你会看到这样的输出:
START RequestId: 6942bebc-1997-42cd-90c2-d76b44c637283 Version: $LATEST
2020-04-29T17:06:07.303Z 6935bebc-1d97-42cd-90c2-d76b4a637683 INFO message 1
message 2
END RequestId: 6942bebc-1997-42cd-90c2-d76b44c637283
因此,要获得您想要的输出,您可以重新定义 console.log
以转到 stderr,或者直接写入 stdout/stderr。
或者您可以使用写入 stdout/stderr 的日志记录框架,这可以让您更灵活地编写消息。我不做 Node 开发,但我听说 Winston 是标准的日志记录框架。
我有一些基于 node.js 的 Lambda 正在记录数据。
为了正确查询和过滤数据等,我想从我的 Lambdas 中记录为纯 JSON 数据。
但是,当我执行常规操作时 console.log
它会生成一个普通的数据字符串。
console.log({a:1,b:2,x:"xxx"})
结果:
2020-04-29T14:46:45.722Z 3f64c499-fbae-4a84-996c-5e5f0cb5302c INFO { a: 1, b: 2, x: 'xxx' }
上面记录的行似乎无法搜索,因为 JSON 使用 CloudWatch 中的各种过滤器匹配选项。
我尝试直接调用 AWS.CloudWatchLogs
API 但是因为我使用的是 lambda,所以我无法在函数调用之间维护一个标记,所以我不确定是不是这样去。
有没有其他人成功地从 Javascript Lambda 中记录原始 JSON?
问题是 console.log()
没有直接转到 stdout/stderr。你可以看到使用这个 Lambda:
const process = require('process');
exports.handler = async (event) => {
console.log("message 1");
process.stdout.write("message 2\n");
};
如果你调用它,你会看到这样的输出:
START RequestId: 6942bebc-1997-42cd-90c2-d76b44c637283 Version: $LATEST
2020-04-29T17:06:07.303Z 6935bebc-1d97-42cd-90c2-d76b4a637683 INFO message 1
message 2
END RequestId: 6942bebc-1997-42cd-90c2-d76b44c637283
因此,要获得您想要的输出,您可以重新定义 console.log
以转到 stderr,或者直接写入 stdout/stderr。
或者您可以使用写入 stdout/stderr 的日志记录框架,这可以让您更灵活地编写消息。我不做 Node 开发,但我听说 Winston 是标准的日志记录框架。