@@ -29,6 +29,7 @@ def __init__(
2929 start_time : datetime ,
3030 log_client : Optional [CloudWatchLogsClient ] = None ,
3131 filter_expression : Optional [str ] = None ,
32+ minimum_log_entries : int = 1 ,
3233 ):
3334 """Fetch and expose Powertools Logger logs from CloudWatch Logs
3435
@@ -42,12 +43,15 @@ def __init__(
4243 Amazon CloudWatch Logs Client, by default boto3.client('logs)
4344 filter_expression : Optional[str], optional
4445 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
4548 """
4649 self .function_name = function_name
4750 self .start_time = int (start_time .timestamp ())
4851 self .log_client = log_client or boto3 .client ("logs" )
4952 self .filter_expression = filter_expression or "message" # Logger message key
5053 self .log_group = f"/aws/lambda/{ self .function_name } "
54+ self .minimum_log_entries = minimum_log_entries
5155 self .logs : List [Log ] = self ._get_logs ()
5256
5357 def get_log (self , key : str , value : Optional [any ] = None ) -> List [Log ]:
@@ -112,6 +116,11 @@ def _get_logs(self) -> List[Log]:
112116 continue
113117 filtered_logs .append (message )
114118
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+
115124 return filtered_logs
116125
117126 def __len__ (self ) -> int :
@@ -122,6 +131,7 @@ def __len__(self) -> int:
122131def get_logs (
123132 function_name : str ,
124133 start_time : datetime ,
134+ minimum_log_entries : int = 1 ,
125135 filter_expression : Optional [str ] = None ,
126136 log_client : Optional [CloudWatchLogsClient ] = None ,
127137) -> LogFetcher :
@@ -133,6 +143,8 @@ def get_logs(
133143 Name of Lambda function to fetch logs for
134144 start_time : datetime
135145 Start date range to filter traces
146+ minimum_log_entries : int
147+ Minimum number of log entries to be retrieved before exhausting retry attempts
136148 log_client : Optional[CloudWatchLogsClient], optional
137149 Amazon CloudWatch Logs Client, by default boto3.client('logs)
138150 filter_expression : Optional[str], optional
@@ -144,5 +156,9 @@ def get_logs(
144156 LogFetcher instance with logs available as properties and methods
145157 """
146158 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 ,
148164 )
0 commit comments