封装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 functools
import inspect import inspect
import logging import logging
import os
from jingrow.model.page import Page from jingrow.model.page import Page
from jingrow.config import Config from jingrow.config import Config
_adapter = None _adapter = None
_local = {} _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"): def _init_adapter(run_mode: str = "api"):
global _adapter 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): 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) return _adapter.db_set_value(pagetype, filters, fieldname, value)
def log_error(title: str, message: str): def log_error(title: Optional[str] = None, message: Optional[str] = None, *, exc: Optional[BaseException] = None) -> None:
return _adapter.log_error(title, message) """输出错误日志到终端。
调用约定
- 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): def throw(title: str, message: str):
return _adapter.throw(title, message) return _adapter.throw(title, message)

View File

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