如何验证Cloudwatch日志组和日志流是否存在?

时间:2016-11-15 03:36:58

标签: java amazon-web-services aws-sdk aws-java-sdk amazon-cloudwatchlogs

在从日志组获取日志事件之前,java中是否有任何方法可以检查给定的日志组和日志流是否存在?

2 个答案:

答案 0 :(得分:1)

伪代码:验证日志组的日志流是否存在

  1. 构建describeLogStreamsRequest
    • 在构造函数或请求的withLogGroupName setter上传递给定的日志组名称。
    • 在请求的withLogStreamNamePrefix setter。
    • 中传入日志流名称
  2. 致电describeLogStreams
  3. 检查DescribeLogStreamsResult对象上生成的日志流。如果列表不是空的,那么您可以安全地对该流进行进一步操作。
  4. Java:验证日志组的日志流是否存在注意:未经测试

    AWSLogsClient logs = new AWSLogsClient();
    
    DescribeLogStreamsRequest req = new DescribeLogStreamsRequest("myLogGroupName")
        .withLogStreamNamePrefix("myLogStreamName");
    
    DescribeLogStreamsResult res = logs.describeLogStreams(req);
    
    if(res != null && res.getLogStreams() != null && !res.getLogStreams().isEmpty())
    {
      // Log Stream exists, do work here
    }
    

答案 1 :(得分:0)

实际上,使用不存在的AWSLogsClient#describeLogStreams来调用logGroupName会生成ResourceNotFoundException。因此,您应该检查:

  1. 缺少ResourceNotFoundException
  2. DescribeLogStreamsResult#getLogStreams中与提供的logStreamName匹配的单个条目的存在。
  3. 将执行此操作的方法的代码段:

    private boolean doesLogStreamExist() {
        DescribeLogStreamsRequest request = new DescribeLogStreamsRequest()
            .withLogGroupName(logGroupName)
            .withLogStreamNamePrefix(logStreamName);
        try {
            return client.describeLogStreams(request).getLogStreams()
                .stream()
                .anyMatch(it -> it.getLogStreamName().equals(logStreamName));
        } catch (ResourceNotFoundException e) {
            // log group does not exist
            return false;
        }
    }