I've started using lambda power-tools for lambda. Currently my code looks like:
@event_source(data_class=SNSEvent)
@LOGGER.inject_lambda_context(log_event=True)
def handler(event: SNSEvent, context: LambdaContext) -> None: # pylint: disable=W0613
"""Lambda function invoked by Image builder SNS topic, putting Image
builder ami-id in parameter store.
:param event: SNS message containing Image Builder build results
:return:
"""
LOGGER.debug(f"Event: {event}") //logging event
for record in event.records:
message = record.sns.message
LOGGER.info(f"Message: {message}")
process_sns_event(message)
return None
In line with comment I want to log what actually is lambda getting at beginning. As for now in cloud watch I'm getting entries like:
Event: <aws_lambda_powertools.utilities.data_classes.sns_event.SNSEvent object at 0x7f9bbd36a0> or Event: <generator object SNSEvent.records at 0x7facfb6510> after updating powertools version to latest.<aws_lambda_powertools.utilities.data_classes.event_bridge_event.EventBridgeEvent object at 0x7f8af526d0> for event bridge one.
I'm confused what should I do to log just event json. Can any one point me out what should I do? (I'm rather beginner as can seen).
edit: After update powertools to latest version I'm getting:
Event: <generator object SNSEvent.records at 0x7facfb6510>
with logging line line change to: LOGGER.debug(f"Event: {event.records}")
I ended up on this post as I was having issues getting powertools to log in JSON format. If someone else ends up here having the same issue it is probably because there is a known issue that shadowJar (shaded jars) dont play nice with the log4j2 from powertools. An additional transformation during the build is required
Using Gradle
Using Maven
and add the following transformation
Other related posts