From 258d82b2c7fe72c493f8c0dff2816fdb1b424993 Mon Sep 17 00:00:00 2001 From: Macdonald Date: Wed, 1 Oct 2025 11:27:07 -0400 Subject: [PATCH 1/2] added a new example that shows how search for log group using a pattern --- .../metadata/cloudwatch-logs_metadata.yaml | 5 +- .../cloudwatch/CloudWatchLogsSearch.java | 79 +++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 javav2/example_code/cloudwatch/src/main/java/com/example/cloudwatch/CloudWatchLogsSearch.java diff --git a/.doc_gen/metadata/cloudwatch-logs_metadata.yaml b/.doc_gen/metadata/cloudwatch-logs_metadata.yaml index 6a424e23c1b..efb2633c861 100644 --- a/.doc_gen/metadata/cloudwatch-logs_metadata.yaml +++ b/.doc_gen/metadata/cloudwatch-logs_metadata.yaml @@ -119,7 +119,10 @@ cloudwatch-logs_DescribeLogStreams: github: javav2/example_code/cloudwatch sdkguide: excerpts: - - description: + - description: Searches for log streams within a specified log group that match a given prefix. + snippet_tags: + - cloudwatch.javav2.read.log.streams.main + - description: Prints metadata about the most recent log stream in a specified log group. snippet_tags: - cloudwatch.javav2.describe.log.streams.main services: diff --git a/javav2/example_code/cloudwatch/src/main/java/com/example/cloudwatch/CloudWatchLogsSearch.java b/javav2/example_code/cloudwatch/src/main/java/com/example/cloudwatch/CloudWatchLogsSearch.java new file mode 100644 index 00000000000..9e244179660 --- /dev/null +++ b/javav2/example_code/cloudwatch/src/main/java/com/example/cloudwatch/CloudWatchLogsSearch.java @@ -0,0 +1,79 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package com.example.cloudwatch; + +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.cloudwatchlogs.CloudWatchLogsClient; +import software.amazon.awssdk.services.cloudwatchlogs.model.DescribeLogStreamsRequest; +import software.amazon.awssdk.services.cloudwatchlogs.model.DescribeLogStreamsResponse; +import software.amazon.awssdk.services.cloudwatchlogs.model.FilterLogEventsRequest; +import software.amazon.awssdk.services.cloudwatchlogs.model.FilterLogEventsResponse; +import software.amazon.awssdk.services.cloudwatchlogs.model.FilteredLogEvent; +import software.amazon.awssdk.services.cloudwatchlogs.model.LogStream; +import java.util.List; + + +// snippet-start:[cloudwatch.javav2.read.log.streams.main] +/** + * Before running this Java V2 code example, set up your development + * environment, including your credentials. + *

+ * For more information, see the following documentation topic: + *

+ * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html + */ +public class CloudWatchLogsSearch { + + private static final String LOG_GROUP_NAME = "WeathertopJavaContainerLogs"; + private static final String LOG_STREAM_PREFIX = "weathertop-java-stream"; + private static final String PATTERN = "INFO"; + private static final Region REGION = Region.US_EAST_1; + + public static void main(String[] args) { + CloudWatchLogsClient cwlClient = CloudWatchLogsClient.builder() + .region(REGION) + .build(); + + searchLogStreamsAndFilterEvents(cwlClient, LOG_GROUP_NAME, LOG_STREAM_PREFIX, PATTERN); + } + + /** + * Searches for log streams with a specific prefix within a log group and filters log events based on a specified pattern. + * + * @param cwlClient the CloudWatchLogsClient used to interact with AWS CloudWatch Logs + * @param logGroupName the name of the log group to search within + * @param logStreamPrefix the prefix of the log streams to search for + * @param pattern the pattern to filter log events by + */ + private static void searchLogStreamsAndFilterEvents(CloudWatchLogsClient cwlClient, String logGroupName, String logStreamPrefix, String pattern) { + DescribeLogStreamsRequest describeLogStreamsRequest = DescribeLogStreamsRequest.builder() + .logGroupName(logGroupName) + .logStreamNamePrefix(logStreamPrefix) + .build(); + + DescribeLogStreamsResponse describeLogStreamsResponse = cwlClient.describeLogStreams(describeLogStreamsRequest); + + List logStreams = describeLogStreamsResponse.logStreams(); + + for (LogStream logStream : logStreams) { + String logStreamName = logStream.logStreamName(); + System.out.println("Searching in log stream: " + logStreamName); + + FilterLogEventsRequest filterLogEventsRequest = FilterLogEventsRequest.builder() + .logGroupName(logGroupName) + .logStreamNames(logStreamName) + .filterPattern(pattern) + .build(); + + FilterLogEventsResponse filterLogEventsResponse = cwlClient.filterLogEvents(filterLogEventsRequest); + + for (FilteredLogEvent event : filterLogEventsResponse.events()) { + System.out.println(event.message()); + } + + System.out.println("--------------------------------------------------"); // Separator for better readability + } + } +} +// snippet-end:[cloudwatch.javav2.read.log.streams.main] \ No newline at end of file From dae2fef47697f7dd2986fc2af59905a0e05ce0ff Mon Sep 17 00:00:00 2001 From: Macdonald Date: Fri, 3 Oct 2025 12:02:23 -0400 Subject: [PATCH 2/2] modified the Style of the example --- .../cloudwatch/CloudWatchLogsSearch.java | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/javav2/example_code/cloudwatch/src/main/java/com/example/cloudwatch/CloudWatchLogsSearch.java b/javav2/example_code/cloudwatch/src/main/java/com/example/cloudwatch/CloudWatchLogsSearch.java index 9e244179660..b1bb90693be 100644 --- a/javav2/example_code/cloudwatch/src/main/java/com/example/cloudwatch/CloudWatchLogsSearch.java +++ b/javav2/example_code/cloudwatch/src/main/java/com/example/cloudwatch/CloudWatchLogsSearch.java @@ -25,17 +25,33 @@ */ public class CloudWatchLogsSearch { - private static final String LOG_GROUP_NAME = "WeathertopJavaContainerLogs"; - private static final String LOG_STREAM_PREFIX = "weathertop-java-stream"; - private static final String PATTERN = "INFO"; - private static final Region REGION = Region.US_EAST_1; - public static void main(String[] args) { + final String usage = """ + + Usage: + + + Where: + logGroupName - The name of the log group (for example, WeathertopJavaContainerLogs). + logStreamName - The name of the log stream (for example, weathertop-java-stream). + pattern - the pattern to use (for example, INFO) + + """; + + if (args.length != 3) { + System.out.print(usage); + System.exit(1); + } + + String logGroupName = args[0] ; + String logStreamName = args[1] ; + String pattern = args[2] ; + CloudWatchLogsClient cwlClient = CloudWatchLogsClient.builder() - .region(REGION) + .region(Region.US_EAST_1) .build(); - searchLogStreamsAndFilterEvents(cwlClient, LOG_GROUP_NAME, LOG_STREAM_PREFIX, PATTERN); + searchLogStreamsAndFilterEvents(cwlClient, logGroupName, logStreamName, pattern); } /**