Skip to content

Commit 3f09b57

Browse files
committed
add structlog
1 parent 757bb2d commit 3f09b57

File tree

3 files changed

+66
-3
lines changed

3 files changed

+66
-3
lines changed

app/main.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
1+
import logging
2+
import os
13
from contextlib import asynccontextmanager
4+
from logging.handlers import RotatingFileHandler
25
from pathlib import Path
36

47
import asyncpg
8+
import orjson
59

610
# from apscheduler import AsyncScheduler
711
# from apscheduler.datastores.sqlalchemy import SQLAlchemyDataStore
812
# from apscheduler.eventbrokers.redis import RedisEventBroker
913
from fastapi import Depends, FastAPI, Request
1014
from fastapi.responses import HTMLResponse
1115
from fastapi.templating import Jinja2Templates
16+
from whenever._whenever import Instant
1217

1318
from app.api.health import router as health_router
1419
from app.api.ml import router as ml_router
@@ -23,9 +28,27 @@
2328
from app.services.auth import AuthBearer
2429

2530
# from app.services.scheduler import SchedulerMiddleware
26-
from app.utils.logging import AppLogger
31+
import structlog
32+
33+
log_date = Instant.now().py_datetime().strftime("%Y%m%d")
34+
35+
structlog.configure(
36+
cache_logger_on_first_use=True,
37+
wrapper_class=structlog.make_filtering_bound_logger(logging.INFO),
38+
processors=[
39+
structlog.contextvars.merge_contextvars,
40+
structlog.processors.add_log_level,
41+
structlog.processors.format_exc_info,
42+
structlog.processors.TimeStamper(fmt="iso", utc=True),
43+
structlog.processors.JSONRenderer(serializer=orjson.dumps),
44+
],
45+
# log per day and per process?
46+
logger_factory=structlog.BytesLoggerFactory(
47+
file=Path(f"cuul_{log_date}_{str(os.getpid())}").with_suffix(".log").open("wb")
48+
)
49+
)
2750

28-
logger = AppLogger().get_logger()
51+
logger = structlog.get_logger()
2952

3053
templates = Jinja2Templates(directory=Path(__file__).parent.parent / "templates")
3154

@@ -45,7 +68,7 @@ async def lifespan(_app: FastAPI):
4568
min_size=5,
4669
max_size=20,
4770
)
48-
logger.info(f"Postgres pool created: {_app.postgres_pool.get_idle_size()=}")
71+
logger.info("Postgres pool created", _app.postgres_pool.get_idle_size())
4972
yield
5073
finally:
5174
# close redis connection and release the resources

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ dependencies = [
2929
"polyfactory>=2.21.0",
3030
"granian>=2.3.2",
3131
"apscheduler[redis,sqlalchemy]>=4.0.0a6",
32+
"structlog>=25.4.0",
33+
"whenever>=0.8.5",
3234
]
3335

3436
[tool.uv]

uv.lock

Lines changed: 38 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)