Nanolib to enhance logging in aws lambda
pip install aws-lambda-logging==0.0.18
Better logging for aws lambda running on python runtime environment with a highly opinionated JSON formatting to ease parsing on any logging system.
import aws_lambda_logging def handler(event, context): aws_lambda_logging.setup(level='DEBUG') ...
You can separately set the logging level for Boto (defaults to the same level):
import aws_lambda_logging def handler(event, context): aws_lambda_logging.setup(level='DEBUG', boto_level='CRITICAL') ...
You can add keyword arguments to be logged each time, such as lambda request id.
import aws_lambda_logging def handler(event, context): aws_lambda_logging.setup(level='DEBUG', aws_request_id=context.get('aws_request_id')) log.debug('Just a try!') ...
It will output JSON formatted message:
{ "level": "DEBUG", "timestamp": "2016-10-03 13:27:57,438", "apigw_request_id": "323fee86-896d-11e6-b7fd-2d914ea80962", "location": "root.handler:6", "message": "Just a try!" }
You can input a JSON string:
log.debug('{"Details": [1,2,3]}')
It will output JSON formatted message with the JSON string embedded properly:
{ "level": "DEBUG", "timestamp": "2016-10-03 13:27:57,438", "apigw_request_id": "323fee86-896d-11e6-b7fd-2d914ea80962", "location": "root.handler:6", "message": { "Details": [ 1, 2, 3 ] } }
You can input a dict:
log.debug({"Details": [1,2,3]})
It will output JSON formatted message with the dict values:
{ "level": "DEBUG", "timestamp": "2016-10-03 13:27:57,438", "apigw_request_id": "323fee86-896d-11e6-b7fd-2d914ea80962", "location": "root.handler:6", "message": { "Details": [ 1, 2, 3 ] } }
Any values that can otherwise be serialisabled to JSON are coerced to
strings. This behaviour can be changed by parsing a formatter
function to the json_default
keyword argument.