Simple and visually pleasing logger for AWS Lambda that prepends your log lines with the log level and the AWS request ID, making searching CLoudWatch for event logs a cinch!
Before installing lambo…
START RequestId: 03cf3256-f2e1-461c-a4a0-60eb91ac8149 Version: $LATEST
This log line was generated with ``print()``
END RequestId: 03cf3256-f2e1-461c-a4a0-60eb91ac8149
REPORT RequestId: 03cf3256-f2e1-461c-a4a0-60eb91ac8149 Duration: 3000.00 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 128 MB
After installing lambo…
START RequestId: 03cf3256-f2e1-461c-a4a0-60eb91ac8149 Version: $LATEST
DEBUG RequestId: 03cf3256-f2e1-461c-a4a0-60eb91ac8149 This log line was generated with ``logger.debug()``
INFO RequestId: 03cf3256-f2e1-461c-a4a0-60eb91ac8149 This log line was generated with ``logger.info()``
WARNING RequestId: 03cf3256-f2e1-461c-a4a0-60eb91ac8149 This log line was generated with ``logger.warning()``
ERROR RequestId: 03cf3256-f2e1-461c-a4a0-60eb91ac8149 This log line was generated with ``logger.error()``
END RequestId: 03cf3256-f2e1-461c-a4a0-60eb91ac8149
REPORT RequestId: 03cf3256-f2e1-461c-a4a0-60eb91ac8149 Duration: 3000.00 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 128 MB
Why not use aws_lambda_powertools? If you are already building your Lambda package with external dependencies well then you could probably use that great tool by AWS.
But if you are looking for a lighter-weight solution with no external dependencies, then this might help you.
pip install lambo
Create a logger using the getLogger()
method and bind it to your Lambda handler functions with the @bind
decorator.
import lambo
logger = lambo.getLogger('my-logger')
@logger.bind
def handler(event, context):
logger.info('HELLO!')
return {'ok': True}
Or, if brevity is your thing, import the built-in logger:
from lambo import logger
@logger.bind
def handler(event, context):
logger.info('HELLO!')
return {'ok': True}
The default log level for lambo loggers is INFO
and the default format string is %(levelname)s %(awsRequestId)s %(message)s
, where awsRequestId
is extracted from the Lambda execution context.
You can override these values at runtime…
import lambo
logger = lambo.getLogger('my-logger', 'DEBUG', '%(message)s')
Or with ENV variables…
export LAMBO_LOG_LEVEL=DEBUG
export LAMBO_LOG_FORMAT="%(message)"