Explore Courses Blog Tutorials Interview Questions
0 votes
in AWS by (19.1k points)

Unhandled exceptions thrown while using the Python 3.7 runtime do not seem to be logged to CloudWatch as they are in Python 3.6. How can you set up the logger in Python 3.7 to capture this information?

To replicate:

1. Create a lambda function like so:

import logging

logger = logging.getLogger()


def lambda_handler(event, context):"This shows fine")

raise Exception("I failed")  

2. Run this function using the Python 3.6 runtime

START RequestId: a2b6038b-0e5f-11e9-9226-9dfc35a22dcc Version: $LATEST

[INFO]  2019-01-02T07:25:52.797Z    a2b6038b-0e5f-11e9-9226-9dfc35a22dcc //This shows fine

 I failed: Exception

Traceback (most recent call last):

File "/var/task/", line 9, in lambda_handler

        raise Exception("I failed")

Exception: I failed

END RequestId: a2b6038b-0e5f-11e9-9226-9dfc35a22dcc

REPORT RequestId: a2b6038b-0e5f-11e9-9226-9dfc35a22dcc  Duration: 1.12 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 21 MB

2. Switch to the Python 3.7 runtime and run again ... no stack trace

    START RequestId: 3840aa8e-0e5d-11e9-bece-45a2022a53c6 Version: $LATEST

    [INFO]  2019-01-02T07:08:35.170Z    3840aa8e-0e5d-11e9-bece-45a2022a53c6    This shows fine

    END RequestId: 3840aa8e-0e5d-11e9-bece-45a2022a53c6

    REPORT RequestId: 3840aa8e-0e5d-11e9-bece-45a2022a53c6  Duration: 2.20 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 20 MB

1 Answer

0 votes
by (44.4k points)

You can use a decorator to overcome this:

def log_errors(func: Callable[[dict, dict], None]):

    def wrapper(*args, **kwargs):


            func(*args, **kwargs)

        except Exception as err:


            raise err


    return wrapper



def handler(event, context):


Related questions

Want to get 50% Hike on your Salary?

Learn how we helped 50,000+ professionals like you !

Browse Categories