Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit 7df1ef3

Browse files
committed
services/logs: Support ListLogGroups
This operation was flagged as missing in parity tests.
1 parent 1002e58 commit 7df1ef3

4 files changed

Lines changed: 59 additions & 3 deletions

File tree

localstack-core/localstack/services/logs/provider.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@
2222
InputLogEvents,
2323
InvalidParameterException,
2424
KmsKeyId,
25+
ListLogGroupsRequest,
26+
ListLogGroupsResponse,
2527
ListTagsForResourceResponse,
2628
ListTagsLogGroupResponse,
2729
LogGroupClass,
2830
LogGroupName,
31+
LogGroupSummary,
2932
LogsApi,
3033
LogStreamName,
3134
PutLogEventsResponse,
@@ -138,6 +141,20 @@ def describe_log_streams(
138141

139142
return moto.call_moto_with_request(context, request_copy)
140143

144+
@handler("ListLogGroups", expand=False)
145+
def list_log_groups(
146+
self, context: RequestContext, request: ListLogGroupsRequest
147+
) -> ListLogGroupsResponse:
148+
pattern: str | None = request.get("logGroupNamePattern")
149+
region_backend: LogsBackend = get_moto_logs_backend(context.account_id, context.region)
150+
moto_groups = copy.deepcopy(region_backend.groups).values()
151+
groups = [
152+
LogGroupSummary(logGroupName=group.name, logGroupArn=group.arn)
153+
for group in sorted(moto_groups, key=lambda g: g.name)
154+
if not pattern or pattern in group.name
155+
]
156+
return ListLogGroupsResponse(logGroups=groups)
157+
141158
def create_log_group(
142159
self,
143160
context: RequestContext,

tests/aws/services/logs/test_logs.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,13 @@ def test_create_and_delete_log_stream(self, logs_log_group, aws_client, region_n
204204
)
205205
snapshot.match("error-describe-logs-group", ctx.value.response)
206206

207+
response = aws_client.logs.list_log_groups(logGroupNamePattern="no-such-group")
208+
snapshot.match("list-log-groups-pattern-no-match", response)
209+
response = aws_client.logs.list_log_groups(
210+
logGroupNamePattern=logs_log_group.split("-")[-1]
211+
)
212+
snapshot.match("list-log-groups-pattern-match", response)
213+
207214
aws_client.logs.create_log_stream(logGroupName=logs_log_group, logStreamName=test_name)
208215
log_streams_between = aws_client.logs.describe_log_streams(logGroupName=logs_log_group).get(
209216
"logStreams", []

tests/aws/services/logs/test_logs.snapshot.json

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,15 @@
140140
}
141141
},
142142
"tests/aws/services/logs/test_logs.py::TestCloudWatchLogs::test_create_and_delete_log_stream": {
143-
"recorded-date": "06-04-2023, 11:42:42",
143+
"recorded-date": "05-11-2025, 11:28:57",
144144
"recorded-content": {
145145
"describe-log-groups-prefix": {
146146
"logGroups": [
147147
{
148148
"arn": "arn:<partition>:logs:<region>:111111111111:log-group:<log-group-name:1>:*",
149149
"creationTime": "timestamp",
150+
"logGroupArn": "arn:<partition>:logs:<region>:111111111111:log-group:<log-group-name:1>",
151+
"logGroupClass": "STANDARD",
150152
"logGroupName": "<log-group-name:1>",
151153
"metricFilterCount": 0,
152154
"storedBytes": 0
@@ -162,7 +164,10 @@
162164
{
163165
"arn": "arn:<partition>:logs:<region>:111111111111:log-group:<log-group-name:1>:*",
164166
"creationTime": "timestamp",
165-
"logGroupName": "<log-group-name:1>"
167+
"logGroupArn": "arn:<partition>:logs:<region>:111111111111:log-group:<log-group-name:1>",
168+
"logGroupClass": "STANDARD",
169+
"logGroupName": "<log-group-name:1>",
170+
"metricFilterCount": 0
166171
}
167172
],
168173
"nextToken": "<next_token>",
@@ -181,6 +186,27 @@
181186
"HTTPStatusCode": 400
182187
}
183188
},
189+
"list-log-groups-pattern-no-match": {
190+
"logGroups": [],
191+
"ResponseMetadata": {
192+
"HTTPHeaders": {},
193+
"HTTPStatusCode": 200
194+
}
195+
},
196+
"list-log-groups-pattern-match": {
197+
"logGroups": [
198+
{
199+
"logGroupArn": "arn:<partition>:logs:<region>:111111111111:log-group:<log-group-name:1>",
200+
"logGroupClass": "STANDARD",
201+
"logGroupName": "<log-group-name:1>"
202+
}
203+
],
204+
"nextToken": "<next_token>",
205+
"ResponseMetadata": {
206+
"HTTPHeaders": {},
207+
"HTTPStatusCode": 200
208+
}
209+
},
184210
"logs_log_group": [
185211
{
186212
"logStreamName": "<log-stream-name:1>",

tests/aws/services/logs/test_logs.validation.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,13 @@
33
"last_validated_date": "2024-05-24T13:57:11+00:00"
44
},
55
"tests/aws/services/logs/test_logs.py::TestCloudWatchLogs::test_create_and_delete_log_stream": {
6-
"last_validated_date": "2023-04-06T09:42:42+00:00"
6+
"last_validated_date": "2025-11-05T11:29:04+00:00",
7+
"durations_in_seconds": {
8+
"setup": 1.86,
9+
"call": 2.59,
10+
"teardown": 0.15,
11+
"total": 4.6
12+
}
713
},
814
"tests/aws/services/logs/test_logs.py::TestCloudWatchLogs::test_filter_log_events_response_header": {
915
"last_validated_date": "2024-05-24T13:58:30+00:00"

0 commit comments

Comments
 (0)