0

すべてのamazon APIには、次のリクエストに設定する必要のある独自のトークンがあります。ドキュメントからどのようにループ経由でアマゾンのすべてのログイベントを取得できますか?

public class Some { 
    public static void main (String[] args) { 
     final GetLogEventsRequest request = new GetLogEventsRequest() 
       .withLogGroupName("myGroup") 
       .withLogStreamName("myStrean"); 
     final AWSLogs awsLogs = AWSLogsClientBuilder.defaultClient(); 
     Collection<OutputLogEvent> result = new ArrayList<>(); 

     GetLogEventsResult response = null; 
     do { 
      response = awsLogs.getLogEvents(request); 
      result.addAll(response.getEvents()); 
      request.withNextToken(response.getNextBackwardToken()); 
     } while (response.getNextBackwardToken() != null); 
    } 
} 

nextBackwardToken

逆方向のアイテムの次のセットのためのトークンAWSは、APIをログにしかし、私は無限ループを得ました。トークンは24時間後に失効します。このトークンは決してnullにはなりません。あなたは、ストリームの終わりに達した場合、それはあなたが渡された同じトークンを返します

だから、LastEvaluatedKeyときscan DynamoDBのようなnullにすることはできません:。だから、

Map<String, AttributeValue> lastKeyEvaluated = null; 
do { 
    ScanRequest scanRequest = new ScanRequest() 
     .withTableName("ProductCatalog") 
     .withLimit(10) 
     .withExclusiveStartKey(lastKeyEvaluated); 

    ScanResult result = client.scan(scanRequest); 
    for (Map<String, AttributeValue> item : result.getItems()){ 
     printItem(item); 
    } 
    lastKeyEvaluated = result.getLastEvaluatedKey(); 
} while (lastKeyEvaluated != null); 

とどのようなIログapiについて話したらrequest.withNextTokenに渡すべきですか?そしてもしnextBackwardToken(そしてnextForwardTokenも)nullであることはできません - どのように私はアマゾンからの最後の応答を受け取ることを検出するか?

+0

トークンが同じかどうかを確認する必要があります。彼らがそうであれば、あなたはストリームの終わりにいます。 –

+0

同じ - あなたは前と次の回答のトークンを意味しますか? – Cherry

+0

はい。彼らが同じであれば、ストリームの終わりにいます。 –

答えて

0

あなたが引用したドキュメントは非常に簡単です。

final AWSLogs awsLogs = AWSLogsClientBuilder.defaultClient(); 
    Collection<OutputLogEvent> result = new ArrayList<>(); 

    String nextToken = null; 
    GetLogEventsResult response; 
    do { 
     GetLogEventsRequest request = new GetLogEventsRequest() 
       .withLogGroupName("myGroup") 
       .withLogStreamName("myStrean"); 
     if (nextToken != null) request = request.withNextToken(nextToken); 

     response = awsLogs.getLogEvents(request); 
     result.addAll(response.getEvents()); 

     // check if token is the same 
     if (response.getNextForwardToken().equals(nextToken)) break; 
     // save new token 
     nextToken = response.getNextForwardToken(); 
    } while (true); 

だから、あなたは、単にそれが古いものに等しくなるまで、新しいトークンを要求するたびに作成する必要があります。私はあなたがこのようなものが必要だと思います。

関連する問題