@@ -29,6 +29,7 @@ def __init__(
29
29
start_time : datetime ,
30
30
log_client : Optional [CloudWatchLogsClient ] = None ,
31
31
filter_expression : Optional [str ] = None ,
32
+ minimum_log_entries : int = 1 ,
32
33
):
33
34
"""Fetch and expose Powertools Logger logs from CloudWatch Logs
34
35
@@ -42,12 +43,15 @@ def __init__(
42
43
Amazon CloudWatch Logs Client, by default boto3.client('logs)
43
44
filter_expression : Optional[str], optional
44
45
CloudWatch Logs Filter Pattern expression, by default "message"
46
+ minimum_log_entries: int
47
+ Minimum number of log entries to be retrieved before exhausting retry attempts
45
48
"""
46
49
self .function_name = function_name
47
50
self .start_time = int (start_time .timestamp ())
48
51
self .log_client = log_client or boto3 .client ("logs" )
49
52
self .filter_expression = filter_expression or "message" # Logger message key
50
53
self .log_group = f"/aws/lambda/{ self .function_name } "
54
+ self .minimum_log_entries = minimum_log_entries
51
55
self .logs : List [Log ] = self ._get_logs ()
52
56
53
57
def get_log (self , key : str , value : Optional [any ] = None ) -> List [Log ]:
@@ -112,6 +116,11 @@ def _get_logs(self) -> List[Log]:
112
116
continue
113
117
filtered_logs .append (message )
114
118
119
+ if len (filtered_logs ) < self .minimum_log_entries :
120
+ raise ValueError (
121
+ f"Number of log entries found doesn't meet minimum required ({ self .minimum_log_entries } ). Repeating..."
122
+ )
123
+
115
124
return filtered_logs
116
125
117
126
def __len__ (self ) -> int :
@@ -122,6 +131,7 @@ def __len__(self) -> int:
122
131
def get_logs (
123
132
function_name : str ,
124
133
start_time : datetime ,
134
+ minimum_log_entries : int = 1 ,
125
135
filter_expression : Optional [str ] = None ,
126
136
log_client : Optional [CloudWatchLogsClient ] = None ,
127
137
) -> LogFetcher :
@@ -133,6 +143,8 @@ def get_logs(
133
143
Name of Lambda function to fetch logs for
134
144
start_time : datetime
135
145
Start date range to filter traces
146
+ minimum_log_entries : int
147
+ Minimum number of log entries to be retrieved before exhausting retry attempts
136
148
log_client : Optional[CloudWatchLogsClient], optional
137
149
Amazon CloudWatch Logs Client, by default boto3.client('logs)
138
150
filter_expression : Optional[str], optional
@@ -144,5 +156,9 @@ def get_logs(
144
156
LogFetcher instance with logs available as properties and methods
145
157
"""
146
158
return LogFetcher (
147
- function_name = function_name , start_time = start_time , filter_expression = filter_expression , log_client = log_client
159
+ function_name = function_name ,
160
+ start_time = start_time ,
161
+ filter_expression = filter_expression ,
162
+ log_client = log_client ,
163
+ minimum_log_entries = minimum_log_entries ,
148
164
)
0 commit comments