Skip to content

Commit a47461d

Browse files
add lambda request id in logs events
1 parent 3f05f51 commit a47461d

3 files changed

Lines changed: 15 additions & 1 deletion

File tree

src/eligibility_signposting_api/app.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from eligibility_signposting_api.common.error_handler import handle_exception
1212
from eligibility_signposting_api.common.request_validator import validate_request_params
1313
from eligibility_signposting_api.config.config import config, init_logging
14+
from eligibility_signposting_api.contextvars_manager import request_id_var
1415
from eligibility_signposting_api.views import eligibility_blueprint
1516

1617
init_logging()
@@ -25,6 +26,8 @@ def main() -> None: # pragma: no cover
2526

2627
@validate_request_params()
2728
def lambda_handler(event: LambdaEvent, context: LambdaContext) -> dict[str, Any]: # pragma: no cover
29+
request_id_var.set(context.aws_request_id)
30+
2831
"""Run the Flask app as an AWS Lambda."""
2932
app = create_app()
3033
app.debug = config()["log_level"] == logging.DEBUG

src/eligibility_signposting_api/config/config.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from pythonjsonlogger.json import JsonFormatter
88
from yarl import URL
99

10+
from eligibility_signposting_api.contextvars_manager import request_id_var
1011
from eligibility_signposting_api.repos.campaign_repo import BucketName
1112
from eligibility_signposting_api.repos.person_repo import TableName
1213

@@ -59,9 +60,16 @@ def config() -> dict[str, Any]:
5960
}
6061

6162

63+
class LoggingJsonFormatter(logging.Formatter):
64+
def format(self, record: logging.LogRecord) -> str:
65+
# Insert request_id from contextvar for every log record
66+
record.request_id = request_id_var.get() or "-"
67+
return super().format(record)
68+
69+
6270
def init_logging(quieten: Sequence[str] = ("asyncio", "botocore", "boto3", "mangum", "urllib3")) -> None:
6371
log_format = "%(asctime)s %(levelname)-8s %(name)s %(module)s.py:%(funcName)s():%(lineno)d %(message)s"
64-
formatter = JsonFormatter(log_format)
72+
formatter = LoggingJsonFormatter(log_format)
6573
handler = logging.StreamHandler()
6674
handler.setFormatter(formatter)
6775
logging.root.handlers = [] # Clear any existing handlers
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from contextvars import ContextVar
2+
3+
request_id_var: ContextVar[str | None] = ContextVar("request_id", default=None)

0 commit comments

Comments
 (0)