Skip to content

Commit fb2febc

Browse files
committed
Merge branch 'develop' of https://github.com/awslabs/aws-lambda-powertools-python into develop
* 'develop' of https://github.com/awslabs/aws-lambda-powertools-python: docs(logger): snippets split, improved, and lint (#1262)
2 parents a6f8912 + 982773b commit fb2febc

File tree

55 files changed

+916
-726
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+916
-726
lines changed

docs/core/logger.md

Lines changed: 199 additions & 721 deletions
Large diffs are not rendered by default.

docs/core/tracer.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Tracer is an opinionated thin wrapper for [AWS X-Ray Python SDK](https://github.
2121
Before your use this utility, your AWS Lambda function [must have permissions](https://docs.aws.amazon.com/lambda/latest/dg/services-xray.html#services-xray-permissions) to send traces to AWS X-Ray.
2222

2323
```yaml hl_lines="9 12" title="AWS Serverless Application Model (SAM) example"
24-
--8<-- "examples/tracer/template.yaml"
24+
--8<-- "examples/tracer/sam/template.yaml"
2525
```
2626

2727
### Lambda handler

examples/tracer/template.yaml renamed to examples/logger/sam/template.yaml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@ Globals:
99
Tracing: Active
1010
Environment:
1111
Variables:
12-
POWERTOOLS_SERVICE_NAME: example
12+
POWERTOOLS_SERVICE_NAME: payment
13+
LOG_LEVEL: INFO
1314
Layers:
1415
# Find the latest Layer version in the official documentation
1516
# https://awslabs.github.io/aws-lambda-powertools-python/latest/#lambda-layer
1617
- !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPython:21
1718

1819
Resources:
19-
CaptureLambdaHandlerExample:
20+
LoggerLambdaHandlerExample:
2021
Type: AWS::Serverless::Function
2122
Properties:
22-
CodeUri: src
23-
Handler: capture_lambda_handler.handler
23+
CodeUri: ../src
24+
Handler: inject_lambda_context.handler

examples/logger/src/append_keys.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from aws_lambda_powertools import Logger
2+
from aws_lambda_powertools.utilities.typing import LambdaContext
3+
4+
logger = Logger()
5+
6+
7+
def handler(event: dict, context: LambdaContext) -> str:
8+
order_id = event.get("order_id")
9+
10+
# this will ensure order_id key always has the latest value before logging
11+
# alternative, you can use `clear_state=True` parameter in @inject_lambda_context
12+
logger.append_keys(order_id=order_id)
13+
logger.info("Collecting payment")
14+
15+
return "hello world"
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from aws_lambda_powertools import Logger
2+
from aws_lambda_powertools.utilities.typing import LambdaContext
3+
4+
logger = Logger()
5+
6+
7+
def handler(event: dict, context: LambdaContext) -> str:
8+
fields = {"request_id": "1123"}
9+
logger.info("Collecting payment", extra=fields)
10+
11+
return "hello world"
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"level": "INFO",
3+
"location": "collect.handler:9",
4+
"message": "Collecting payment",
5+
"timestamp": "2021-05-03 11:47:12,494+0200",
6+
"service": "payment",
7+
"request_id": "1123"
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"level": "INFO",
3+
"location": "collect.handler:11",
4+
"message": "Collecting payment",
5+
"timestamp": "2021-05-03 11:47:12,494+0200",
6+
"service": "payment",
7+
"order_id": "order_id_value"
8+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import os
2+
3+
import requests
4+
5+
from aws_lambda_powertools import Logger
6+
7+
ENDPOINT = os.getenv("PAYMENT_API", "")
8+
logger = Logger(service="payment")
9+
10+
11+
class PaymentError(Exception):
12+
...
13+
14+
15+
def handler(event, context):
16+
logger.append_keys(payment_id="123456789")
17+
charge_id = event.get("charge_id", "")
18+
19+
try:
20+
ret = requests.post(url=f"{ENDPOINT}/collect", data={"charge_id": charge_id})
21+
ret.raise_for_status()
22+
23+
logger.info("Charge collected successfully", extra={"charge_id": charge_id})
24+
return ret.json()
25+
except requests.HTTPError as e:
26+
raise PaymentError(f"Unable to collect payment for charge {charge_id}") from e
27+
28+
logger.info("goodbye")
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[
2+
{
3+
"level": "INFO",
4+
"location": "<module>:22",
5+
"message": "Charge collected successfully",
6+
"timestamp": "2021-01-12 14:09:10,859",
7+
"service": "payment",
8+
"sampling_rate": 0.0,
9+
"payment_id": "123456789",
10+
"charge_id": "75edbad0-0857-4fc9-b547-6180e2f7959b"
11+
},
12+
{
13+
"level": "INFO",
14+
"location": "<module>:27",
15+
"message": "goodbye",
16+
"timestamp": "2021-01-12 14:09:10,860",
17+
"service": "payment",
18+
"sampling_rate": 0.0,
19+
"payment_id": "123456789"
20+
}
21+
]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from aws_lambda_powertools import Logger
2+
from aws_lambda_powertools.logging.formatter import LambdaPowertoolsFormatter
3+
4+
5+
class CustomFormatter(LambdaPowertoolsFormatter):
6+
def serialize(self, log: dict) -> str:
7+
"""Serialize final structured log dict to JSON str"""
8+
log["event"] = log.pop("message") # rename message key to event
9+
return self.json_serializer(log) # use configured json serializer
10+
11+
12+
logger = Logger(service="payment", logger_formatter=CustomFormatter())
13+
logger.info("hello")

0 commit comments

Comments
 (0)