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처럼 null 일 수 없습니다 때 scan DynamoDB의 :

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); 
그래서

와 내가 우리가 로그 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); 

그래서, 당신은 단순히 예전에 동일하게 될 때까지 새로운 토큰을 요청 매번 작성해야합니다 : 난 당신이 뭔가를 필요가 있다고 생각합니다.