1+ import logging
2+ import os
13from contextlib import asynccontextmanager
4+ from logging .handlers import RotatingFileHandler
25from pathlib import Path
36
47import asyncpg
8+ import orjson
59
610# from apscheduler import AsyncScheduler
711# from apscheduler.datastores.sqlalchemy import SQLAlchemyDataStore
812# from apscheduler.eventbrokers.redis import RedisEventBroker
913from fastapi import Depends , FastAPI , Request
1014from fastapi .responses import HTMLResponse
1115from fastapi .templating import Jinja2Templates
16+ from whenever ._whenever import Instant
1217
1318from app .api .health import router as health_router
1419from app .api .ml import router as ml_router
2328from 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
3053templates = 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
0 commit comments