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

问题描述 投票:3回答:2

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

java amazon-web-services aws-sdk aws-java-sdk amazon-cloudwatchlogs
2个回答
1
投票

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

  1. 建立describeLogStreamsRequest: 在构造函数或请求的withLogGroupName setter上传入给定的日志组名称。 在请求的withLogStreamNamePrefix setter中传入日志流名称。
  2. 打电话给describeLogStreams
  3. 检查DescribeLogStreamsResult对象上生成的日志流。如果列表不为空,则可以安全地对该流进行操作。

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
}

0
投票

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

  1. 没有ResourceNotFoundException
  2. DescribeLogStreamsResult#getLogStreams中存在与logStreamName匹配的单个条目。

将执行此操作的方法的代码段:

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.