封装log_error用于统一输出日志

This commit is contained in:
jingrow 2025-10-30 20:47:27 +08:00
parent 8233b2e69e
commit 9c0be24592
2 changed files with 41 additions and 2 deletions

View File

@ -5,12 +5,36 @@ from typing import Dict, List, Any, Optional, Union
import functools
import inspect
import logging
import os
from jingrow.model.page import Page
from jingrow.config import Config
_adapter = None
_local = {}
# 统一 Jingrow 日志记录器(仅为本模块及调用方提供最小可用输出,不修改全局 root logger
_root_logger = logging.getLogger("jingrow")
def _ensure_logging_configured() -> None:
if not _root_logger.handlers:
handler = logging.StreamHandler()
formatter = logging.Formatter(
fmt="%(asctime)s %(levelname)s %(name)s - %(message)s"
)
handler.setFormatter(formatter)
_root_logger.addHandler(handler)
# 从配置文件Config读取日志级别默认 INFO
try:
level_name = str(getattr(Config, 'log_level', 'INFO')).upper()
except Exception:
level_name = 'INFO'
try:
level = getattr(logging, level_name, logging.INFO)
except Exception:
level = logging.INFO
_root_logger.setLevel(level)
def _init_adapter(run_mode: str = "api"):
global _adapter
@ -50,8 +74,21 @@ def db_get_value(pagetype: str, filters: Dict[str, Any] = None, fieldname: str =
def db_set_value(pagetype: str, filters: Dict[str, Any] = None, fieldname: str = None, value: Any = None):
return _adapter.db_set_value(pagetype, filters, fieldname, value)
def log_error(title: str, message: str):
return _adapter.log_error(title, message)
def log_error(title: Optional[str] = None, message: Optional[str] = None, *, exc: Optional[BaseException] = None) -> None:
"""输出错误日志到终端。
调用约定
- log_error(content) -> 仅内容
- log_error(title, content) -> 标题 + 内容
- 可选 exc=Exception(...) 传入异常以带上堆栈
"""
_ensure_logging_configured()
# 兼容仅传内容或传标题+内容两种形式
if message is None:
content = "" if title is None else str(title)
else:
content = str(message) if title is None else f"{title} - {message}"
_root_logger.error(content, exc_info=exc)
def throw(title: str, message: str):
return _adapter.throw(title, message)

View File

@ -35,6 +35,8 @@ class Settings(BaseSettings):
run_mode: str = 'api'
# 环境development/production控制启动模式、热重载等
environment: str = 'development'
# 日志级别DEBUG/INFO/WARNING/ERROR/CRITICAL全局默认级别
log_level: str = 'INFO'
# 本地后端主机配置
backend_host: str = '0.0.0.0'