Skip to content

Commit 75558ee

Browse files
authored
Merge pull request #30 from Pangjiping/feat/server-log-ts
feat(server): unify logging format with colored level prefix
2 parents 34cd161 + 9a74dc8 commit 75558ee

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

server/src/main.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
and configuration for the sandbox lifecycle management service.
2020
"""
2121

22-
import logging
22+
import copy
23+
import logging.config
2324
from typing import Any
2425

2526
from fastapi import FastAPI, Request
@@ -28,10 +29,36 @@
2829
from fastapi.responses import JSONResponse
2930

3031
from src.config import load_config
32+
from uvicorn.config import LOGGING_CONFIG as UVICORN_LOGGING_CONFIG
3133

3234
# Load configuration before initializing routers/middleware
3335
app_config = load_config()
34-
logging.basicConfig(level=getattr(logging, app_config.server.log_level.upper(), logging.INFO))
36+
37+
# Unify logging format (including uvicorn access/error logs) with timestamp prefix.
38+
_log_config = copy.deepcopy(UVICORN_LOGGING_CONFIG)
39+
_fmt = "%(levelprefix)s %(asctime)s %(name)s: %(message)s"
40+
_datefmt = "%Y-%m-%d %H:%M:%S%z"
41+
42+
# Enable colors and set format for both default and access loggers
43+
_log_config["formatters"]["default"]["fmt"] = _fmt
44+
_log_config["formatters"]["default"]["datefmt"] = _datefmt
45+
_log_config["formatters"]["default"]["use_colors"] = True
46+
47+
_log_config["formatters"]["access"]["fmt"] = _fmt
48+
_log_config["formatters"]["access"]["datefmt"] = _datefmt
49+
_log_config["formatters"]["access"]["use_colors"] = True
50+
51+
# Ensure project loggers (src.*) emit at configured level using the default handler.
52+
_log_config["loggers"]["src"] = {
53+
"handlers": ["default"],
54+
"level": app_config.server.log_level.upper(),
55+
"propagate": False,
56+
}
57+
58+
logging.config.dictConfig(_log_config)
59+
logging.getLogger().setLevel(
60+
getattr(logging, app_config.server.log_level.upper(), logging.INFO)
61+
)
3562

3663
from src.api.lifecycle import router # noqa: E402
3764
from src.middleware.auth import AuthMiddleware # noqa: E402
@@ -113,4 +140,5 @@ async def health_check():
113140
host=app_config.server.host,
114141
port=app_config.server.port,
115142
reload=True,
143+
log_config=_log_config,
116144
)

0 commit comments

Comments
 (0)