优化apps/jingrow/jingrow/__init__.py
This commit is contained in:
parent
9f73ff1eb3
commit
7ad5b29276
@ -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:
|
||||
"""输出错误日志到终端。
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user