Skip to content

Instantly share code, notes, and snippets.

@amancevice
Created January 6, 2021 20:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amancevice/b7e2fea25f3591ade09fdbb68cbfd1ef to your computer and use it in GitHub Desktop.
Save amancevice/b7e2fea25f3591ade09fdbb68cbfd1ef to your computer and use it in GitHub Desktop.
Simple and uniform logging in AWS Lambda
import json
import logging
import os
import sys
class SuppressFilter(logging.Filter):
def __init__(self, logger):
self.logger = logger
def filter(self, record):
logger = record.name
return False if self.logger in logger else True
class LambdaLogger(logging.LoggerAdapter):
LOG_LEVEL = os.getenv('LOG_LEVEL') or 'INFO'
LOG_FORMAT = os.getenv('LOG_FORMAT') \
or '%(levelname)s RequestId: %(reqid)s %(message)s'
def __init__(self, name, level=None, format_string=None):
logger = logging.getLogger(name)
formatter = logging.Formatter(format_string or self.LOG_FORMAT)
for handler in logger.handlers:
handler.setFormatter(formatter)
else:
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(formatter)
logger.addHandler(handler)
for handler in logging.root.handlers:
handler.addFilter(SuppressFilter(name))
super().__init__(logger, dict(reqid=None))
self.setLevel(level or self.LOG_LEVEL)
def addContext(self, context=None):
if context:
self.extra.update(reqid=context.aws_request_id)
logger = LambdaLogger(__name__)
def handler(event, context=None):
logger.addContext(context)
logger.info(json.dumps(event))
logger.warning('HELP!')
# >>> handler({'fizz': 'buzz'}, context)
# START RequestId: 8141a733-1269-4356-8aee-e2a66ce8014c Version: $LATEST
# INFO RequestId: 8141a733-1269-4356-8aee-e2a66ce8014c {"fizz": "buzz"}
# WARNING RequestId: 8141a733-1269-4356-8aee-e2a66ce8014c HELP!
# END RequestId: 8141a733-1269-4356-8aee-e2a66ce8014c
# REPORT RequestId: 8141a733-1269-4356-8aee-e2a66ce8014c Duration: 1.66 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 52 MB Init Duration: 123.10 ms
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment