diff --git a/poetry.lock b/poetry.lock index 454e9c8c..5a045084 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2142,6 +2142,21 @@ pycrypto = ["pycrypto (>=2.6.0,<2.7.0)"] pycryptodome = ["pycryptodome (>=3.3.1,<4.0.0)"] test = ["pytest", "pytest-cov"] +[[package]] +name = "python-json-logger" +version = "3.3.0" +description = "JSON Log Formatter for the Python Logging Package" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7"}, + {file = "python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84"}, +] + +[package.extras] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec ; implementation_name != \"pypy\"", "mypy", "orjson ; implementation_name != \"pypy\"", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] + [[package]] name = "pyyaml" version = "6.0.2" @@ -2718,4 +2733,4 @@ propcache = ">=0.2.0" [metadata] lock-version = "2.1" python-versions = "^3.13" -content-hash = "77f89af354ea0782651c8ec880f986a548967aee33149c8f128398e08b783567" +content-hash = "66d3b08c30efad3bc44af346e21ccb3b79ceed688d3337ece9e839ec8003903a" diff --git a/pyproject.toml b/pyproject.toml index def4f287..75ecdf94 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,7 @@ botocore = "^1.37.3" eval-type-backport = "^0.2.2" mangum = "^0.19.0" wireup = "^0.16.0" +python-json-logger = "^3.3.0" [tool.poetry.group.dev.dependencies] ruff = "^0.11.0" diff --git a/src/eligibility_signposting_api/config.py b/src/eligibility_signposting_api/config.py index 1b4aa414..27618328 100644 --- a/src/eligibility_signposting_api/config.py +++ b/src/eligibility_signposting_api/config.py @@ -2,6 +2,7 @@ import os from typing import Any, NewType +from pythonjsonlogger.json import JsonFormatter from yarl import URL LOG_LEVEL = logging.getLevelNamesMapping().get(os.getenv("LOG_LEVEL", ""), logging.WARNING) @@ -22,4 +23,7 @@ def config() -> dict[str, Any]: def init_logging() -> None: log_format = "%(asctime)s %(levelname)-8s %(name)s %(module)s.py:%(funcName)s():%(lineno)d %(message)s" - logging.basicConfig(level=LOG_LEVEL, format=log_format, handlers=[logging.StreamHandler()]) + formatter = JsonFormatter(log_format) + handler = logging.StreamHandler() + handler.setFormatter(formatter) + logging.basicConfig(level=LOG_LEVEL, format=log_format, handlers=[handler])