【发布时间】:2016-11-15 03:36:58
【问题描述】:
在从日志组获取日志事件之前,java中有没有方法可以检查给定的日志组和日志流是否存在?
【问题讨论】:
标签: java amazon-web-services aws-sdk aws-java-sdk amazon-cloudwatchlogs
在从日志组获取日志事件之前,java中有没有方法可以检查给定的日志组和日志流是否存在?
【问题讨论】:
标签: java amazon-web-services aws-sdk aws-java-sdk amazon-cloudwatchlogs
伪代码:验证日志组的日志流是否存在
withLogGroupName setter 上传递给定的日志组名称。withLogStreamNamePrefix setter 中传入日志流名称。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
}
【讨论】:
logGroupName 调用AWSLogsClient#describeLogStreams 将生成ResourceNotFoundException。如果不确定日志组是否存在,则应处理异常。
实际上,使用不存在的logGroupName 调用AWSLogsClient#describeLogStreams 将生成ResourceNotFoundException。因此,您应该检查:
ResourceNotFoundException。DescribeLogStreamsResult#getLogStreams 中存在与提供的logStreamName 匹配的单个条目。执行此操作的方法的代码 sn-p:
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;
}
}
【讨论】: