优化apps/jingrow/jingrow/__init__.py

This commit is contained in:
jingrow 2025-10-31 20:58:10 +08:00
parent 9f73ff1eb3
commit 7ad5b29276

View File

@ -26,44 +26,6 @@ for _lvl in list(_ANSI.keys()):
_code = _ANSI[_lvl]
logging.addLevelName(getattr(logging, _lvl), f"{_code}{_lvl}\x1b[0m")
def _ensure_logging_configured() -> None:
# 统一在 root logger 上配置输出与格式,这样通过名为 "jingrow" 的 logger 打印时,
# 也会以 "jingrow - ERROR - ... - 时间" 的格式输出,并带颜色的级别名。
root_logger = logging.getLogger()
if not root_logger.handlers:
handler = logging.StreamHandler()
# 统一样式:不含 logger 名称,只输出级别、消息、时间
formatter = logging.Formatter("%(levelname)s - %(message)s - %(asctime)s")
handler.setFormatter(formatter)
root_logger.addHandler(handler)
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)
# 如果已存在其他 handler但需要强制向控制台输出例如运行在 API 模式),
# 则在设置了环境变量 JINGROW_STREAM_LOGGING 的情况下,补充一个 StreamHandler。
try:
force_stream = os.environ.get("JINGROW_STREAM_LOGGING")
except Exception:
force_stream = None
if force_stream and not any(isinstance(h, logging.StreamHandler) for h in root_logger.handlers):
_sh = logging.StreamHandler()
_sh.setFormatter(logging.Formatter("%(levelname)s - %(message)s - %(asctime)s"))
root_logger.addHandler(_sh)
# 使用 root 的处理器,避免 jingrow 自带 handler 导致重复输出
if _root_logger.handlers:
_root_logger.handlers.clear()
_root_logger.propagate = True
# 与 root 保持同级别,避免级别不一致导致丢日志
_root_logger.setLevel(root_logger.level)
# ====== High-level helpers to enforce Page lifecycle (hooks) ======
@ -144,6 +106,44 @@ def get_meta(pagetype: str):
"""获取 pagetype 的元数据,返回后端适配器的原始结果结构。"""
return Page(pagetype).get_meta()
def _ensure_logging_configured() -> None:
# 统一在 root logger 上配置输出与格式,这样通过名为 "jingrow" 的 logger 打印时,
# 也会以 "jingrow - ERROR - ... - 时间" 的格式输出,并带颜色的级别名。
root_logger = logging.getLogger()
if not root_logger.handlers:
handler = logging.StreamHandler()
# 统一样式:不含 logger 名称,只输出级别、消息、时间
formatter = logging.Formatter("%(levelname)s - %(message)s - %(asctime)s")
handler.setFormatter(formatter)
root_logger.addHandler(handler)
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)
# 如果已存在其他 handler但需要强制向控制台输出例如运行在 API 模式),
# 则在设置了环境变量 JINGROW_STREAM_LOGGING 的情况下,补充一个 StreamHandler。
try:
force_stream = os.environ.get("JINGROW_STREAM_LOGGING")
except Exception:
force_stream = None
if force_stream and not any(isinstance(h, logging.StreamHandler) for h in root_logger.handlers):
_sh = logging.StreamHandler()
_sh.setFormatter(logging.Formatter("%(levelname)s - %(message)s - %(asctime)s"))
root_logger.addHandler(_sh)
# 使用 root 的处理器,避免 jingrow 自带 handler 导致重复输出
if _root_logger.handlers:
_root_logger.handlers.clear()
_root_logger.propagate = True
# 与 root 保持同级别,避免级别不一致导致丢日志
_root_logger.setLevel(root_logger.level)
def log_error(title: Optional[str] = None, message: Optional[str] = None, *, exc: Optional[BaseException] = None) -> None:
"""输出错误日志到终端。