-
-
Save niranjv/fb95e716151642e8ca553b0e38dd152e to your computer and use it in GitHub Desktop.
| # Python logger in AWS Lambda has a preset format. To change the format of the logging statement, | |
| # remove the logging handler & add a new handler with the required format | |
| import logging | |
| import sys | |
| def setup_logging(): | |
| logger = logging.getLogger() | |
| for h in logger.handlers: | |
| logger.removeHandler(h) | |
| h = logging.StreamHandler(sys.stdout) | |
| # use whatever format you want here | |
| FORMAT = '%(asctime)s %(message)s' | |
| h.setFormatter(logging.Formatter(FORMAT)) | |
| logger.addHandler(h) | |
| logger.setLevel(logging.INFO) | |
| return logger | |
| def lambda_handler(event, context): | |
| logger = setup_logging() | |
| logger.info("This is a test log statement!") | |
| return | |
| # Expected output from Lambda: | |
| # | |
| # START RequestId: 1a2b3c4d-abcd-1234-efgh-1a2b3c4d5e6f Version: $LATEST | |
| # 2017-10-06 22:40:59,653 This is a test log statement! | |
| # END RequestId: 1a2b3c4d-abcd-1234-efgh-1a2b3c4d5e6f | |
| # REPORT RequestId: 1a2b3c4d-abcd-1234-efgh-1a2b3c4d5e6f Duration: 0.41 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 21 MB |
I was able to retain aws_request_id in the log output:
https://gist.github.com/matthewpick/3aa01abfeda36eae717837a99994d3ed
has anyone managed to find a nice way to get "aws_request_id" when using the approach of removing the default handler and using your own?
Since the default handler's filter injects the aws_request_id into the record, if you remove the default handler, you will not be able to retrieve aws_request_id. Therefore, instead of removing the default handler and adding your own, you should just modify the formatter using setFormatter.
Also you can see the code of default handler and filter
https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/849e874de01776cb386c18fb2c1731d43cd2b2f4/awslambdaric/bootstrap.py#L339C1-L342C20
I prefer keep the number of 3rd party dependencies in my lambdas low but I do like to have control of the logging configuration. I have had some success using something similar to the following:
Obviously this comes with the risk of assuming AWS do not change the runtime bootstrapping code (tested on python3.8 runtime).