|
@@ -7,22 +7,30 @@ from datetime import datetime, timezone
|
|
|
request_id_var: ContextVar[str] = ContextVar("request_id", default="-")
|
|
request_id_var: ContextVar[str] = ContextVar("request_id", default="-")
|
|
|
|
|
|
|
|
|
|
|
|
|
-class JSONFormatter(logging.Formatter):
|
|
|
|
|
|
|
+class ReadableFormatter(logging.Formatter):
|
|
|
def format(self, record: logging.LogRecord) -> str:
|
|
def format(self, record: logging.LogRecord) -> str:
|
|
|
- log_data = {
|
|
|
|
|
- "timestamp": datetime.now(timezone.utc).isoformat(),
|
|
|
|
|
- "level": record.levelname,
|
|
|
|
|
- "module": record.module,
|
|
|
|
|
- "function": record.funcName,
|
|
|
|
|
- "line": record.lineno,
|
|
|
|
|
- "message": record.getMessage(),
|
|
|
|
|
- "request_id": request_id_var.get("-"),
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ # 将时间格式化为本地时间
|
|
|
|
|
+ local_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
|
+ request_id = request_id_var.get("-")
|
|
|
|
|
+ message = record.getMessage()
|
|
|
|
|
+
|
|
|
|
|
+ # 构建基础日志信息
|
|
|
|
|
+ if record.levelname == "INFO":
|
|
|
|
|
+ # INFO级别: [INFO] timestamp message (request_id)
|
|
|
|
|
+ log_msg = f"[{record.levelname}] {local_time} {message}"
|
|
|
|
|
+ if request_id != "-":
|
|
|
|
|
+ log_msg += f" ({request_id})"
|
|
|
|
|
+ else:
|
|
|
|
|
+ # 非INFO级别: [LEVEL] timestamp message module function line (request_id)
|
|
|
|
|
+ log_msg = f"[{record.levelname}] {local_time} {message} {record.module} {record.funcName} {record.lineno}"
|
|
|
|
|
+ if request_id != "-":
|
|
|
|
|
+ log_msg += f" ({request_id})"
|
|
|
|
|
+
|
|
|
|
|
+ # 如果有异常信息,追加到日志后面
|
|
|
if record.exc_info and record.exc_info[0] is not None:
|
|
if record.exc_info and record.exc_info[0] is not None:
|
|
|
- log_data["exception"] = self.formatException(record.exc_info)
|
|
|
|
|
- if hasattr(record, "extra_data"):
|
|
|
|
|
- log_data["extra"] = record.extra_data
|
|
|
|
|
- return json.dumps(log_data, ensure_ascii=False)
|
|
|
|
|
|
|
+ log_msg += "\n" + self.formatException(record.exc_info)
|
|
|
|
|
+
|
|
|
|
|
+ return log_msg
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_logger(name: str) -> logging.Logger:
|
|
def get_logger(name: str) -> logging.Logger:
|
|
@@ -31,7 +39,7 @@ def get_logger(name: str) -> logging.Logger:
|
|
|
logger = logging.getLogger(name)
|
|
logger = logging.getLogger(name)
|
|
|
if not logger.handlers:
|
|
if not logger.handlers:
|
|
|
handler = logging.StreamHandler(sys.stdout)
|
|
handler = logging.StreamHandler(sys.stdout)
|
|
|
- handler.setFormatter(JSONFormatter())
|
|
|
|
|
|
|
+ handler.setFormatter(ReadableFormatter())
|
|
|
logger.addHandler(handler)
|
|
logger.addHandler(handler)
|
|
|
logger.setLevel(getattr(logging, settings.log_level, logging.INFO))
|
|
logger.setLevel(getattr(logging, settings.log_level, logging.INFO))
|
|
|
logger.propagate = False
|
|
logger.propagate = False
|