Skip to content

Commit bb8a0dc

Browse files
committed
json logs: use python-json-logger
1 parent 1d5bc91 commit bb8a0dc

3 files changed

Lines changed: 21 additions & 6 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ dependencies = [
2828
'cloudflare',
2929
'alembic',
3030
'httpx',
31+
'python-json-logger>=4.0',
3132
]
3233

3334
[tool.setuptools]

src/api/__init__.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,30 @@
2828

2929

3030
def _logging_config() -> dict[str, Any]:
31-
log_format = "%(asctime)s - %(levelname)s - %(name)s - %(message)s"
3231
date_format = "%Y-%m-%dT%H:%M:%S%z"
33-
log_level = get_settings().log_level
32+
settings = get_settings()
33+
log_level = settings.log_level
34+
if settings.log_json:
35+
formatter: dict[str, Any] = {
36+
"()": "pythonjsonlogger.json.JsonFormatter",
37+
"fmt": "%(asctime)s %(levelname)s %(name)s %(message)s",
38+
"rename_fields": {
39+
"asctime": "timestamp",
40+
"levelname": "level",
41+
"name": "logger",
42+
},
43+
"datefmt": date_format,
44+
}
45+
else:
46+
formatter = {
47+
"format": "%(asctime)s - %(levelname)s - %(name)s - %(message)s",
48+
"datefmt": date_format,
49+
}
3450
return {
3551
"version": 1,
3652
"disable_existing_loggers": False,
3753
"formatters": {
38-
"default": {
39-
"format": log_format,
40-
"datefmt": date_format,
41-
},
54+
"default": formatter,
4255
},
4356
"handlers": {
4457
"default": {

src/api/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class Settings(BaseSettings):
2222
keycloak_admin_name: str
2323
keycloak_admin_secret: str
2424
log_level: Literal["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG"] = "INFO"
25+
log_json: bool = True
2526
resource_monitor_interval: Annotated[timedelta, BeforeValidator(permissive_numeric_timedelta)] = timedelta(
2627
seconds=60
2728
)

0 commit comments

Comments
 (0)