我有一個小函式,它被發送日志到它。在這個函式中,我試圖將其發送到AWS Cloudwatch,但是我遇到了一些問題。一旦發送了一條日志,在第一條日志完成之前,我不能再發送另一條,因為我需要下一個sequenceToken,以便下一條日志知道在哪里添加自己。我知道異步迭代器是這里的關鍵,但不確定如何在我的代碼中實作它們。以下是我目前的代碼,它在發送第一條日志后就失敗了:
const build = require('pino-abstract-stream')。
const stream = async(options)=> {
//創建AWS的連接。
const client = await createClient() 。
//獲取第一個令牌。
let sequenceToken = await getInitSequenceToken(client)。
return build(function(source) {
source.on("data", async function (obj) {
//每次日志被發送到我的作業執行緒時,都會在這里列印出來。Obj包含來自日志的資訊。
const command = new PutLogEventsCommand( {
logGroupName: "api",
logStreamName: `executive-${Config.env}-${Config.location}`。
logEvents: [
{
message: obj.msg,
timestamp: obj.time,
},
],
sequenceToken。
});
//我在這里將日志發送到Clouwatch。
const response = await client.send(命令)。
//這里我在更新令牌,但這是失敗的,因為下一個日志已經在發送。
sequenceToken = response.nextSequenceToken。
});
});
};
uj5u.com熱心網友回復:
你可以等待流(source)完成,并將所有物件存盤到一個陣列中,然后用一個請求來發送它們 - 看到logEvents接受一個包含多個物件的陣列 - 這可能是更好的解決方案,因為你有物件的時間戳,你會將它們全部歸入一個sequenceToken:
const build = require('pino-abstract-stream')。
const stream = async(options)=> {
//創建AWS的連接。
const client = await createClient() 。
//獲取第一個令牌。
let sequenceToken = await getInitSequenceToken(client)。
let storeStreamObjects = [];
return build(function(source) {
source.on("data", async function(obj) {
storeStreamObjects.push({
message: obj.msg,
timestamp: obj.time,
});
});
source.on("close", async ( ) => {
const command = new PutLogEventsCommand({
logGroupName: "api",
logStreamName: `executive-${Config.env}-${Config.location}`。
logEvents: storeStreamObjects, //所有物件都在這里。
sequenceToken。
});
return await client.send(命令)。
})
});
};
uj5u.com熱心網友回復:
如果以后可以將日志發送到云端,你可以像下面這樣做。
如果可以將日志發送到云端,你可以像下面這樣做。
const build = require("pino-abstract-stream")。
const stream = async options => {
//創建AWS的連接。
const client = await createClient() 。
//獲取第一個令牌。
let sequenceToken = await getInitSequenceToken(client)。
const steamData = [];
return build(function(source) {
source.on("data", async function (obj) {
steamData.push(obj)。
});
source.on("end", async function () {
//每次日志被發送到我的作業執行緒時,都會在這里列印出來。Obj包含來自日志的資訊。
for (const data of steamData) {
const command = new PutLogEventsCommand( {
logGroupName: "api",
logStreamName: `executive-${Config.env}-${Config.location}`。
logEvents: [
{
message: data.msg,
timestamp: data.time,
},
],
sequenceToken。
});
//我在這里將日志發送到Clouwatch。
const response = await client.send(命令)。
sequenceToken = response.nextSequenceToken。
}
});
});
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318062.html
標籤:
