100 lines
3.3 KiB
Python
100 lines
3.3 KiB
Python
"""
|
||
MinerU通用日志模块
|
||
根据运行环境自动选择合适的日志系统
|
||
优先从adapter中导入,如果失败则使用默认logger
|
||
"""
|
||
|
||
import os
|
||
import sys
|
||
import logging
|
||
|
||
def get_logger_for_environment():
|
||
"""根据环境获取合适的logger"""
|
||
|
||
# 1. 检测是否在MaxKB环境中
|
||
if os.path.exists('/opt/maxkb-app/apps'):
|
||
try:
|
||
# 尝试导入MaxKB的logger
|
||
from common.utils.logger import maxkb_logger
|
||
|
||
# 设置日志级别
|
||
log_level = os.environ.get('MINERU_LOG_LEVEL', 'INFO')
|
||
if hasattr(logging, log_level):
|
||
maxkb_logger.setLevel(getattr(logging, log_level))
|
||
else:
|
||
maxkb_logger.setLevel(logging.INFO)
|
||
|
||
# 确保有handler(如果没有的话)
|
||
if not maxkb_logger.handlers:
|
||
handler = logging.StreamHandler()
|
||
# 使用MaxKB风格的格式
|
||
formatter = logging.Formatter('%(asctime)s [%(name)s %(levelname)s] %(message)s',
|
||
datefmt='%Y-%m-%d %H:%M:%S')
|
||
handler.setFormatter(formatter)
|
||
handler.setLevel(logging.DEBUG)
|
||
maxkb_logger.addHandler(handler)
|
||
|
||
# 返回MaxKB logger
|
||
return maxkb_logger, 'maxkb'
|
||
except ImportError:
|
||
pass
|
||
|
||
# 2. 尝试从gbase_adapter导入
|
||
try:
|
||
from .gbase_adapter.logger import logger as gbase_logger
|
||
return gbase_logger, 'gbase'
|
||
except ImportError:
|
||
pass
|
||
|
||
# 3. 创建默认logger
|
||
default_logger = logging.getLogger('mineru')
|
||
if not default_logger.handlers:
|
||
handler = logging.StreamHandler()
|
||
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||
handler.setFormatter(formatter)
|
||
default_logger.addHandler(handler)
|
||
default_logger.setLevel(logging.INFO)
|
||
|
||
return default_logger, 'default'
|
||
|
||
# 获取环境logger
|
||
base_logger, env_type = get_logger_for_environment()
|
||
|
||
def get_module_logger(module_name):
|
||
"""为特定模块获取logger
|
||
|
||
在MaxKB环境下,创建max_kb的子logger
|
||
在其他环境下,创建相应的子logger
|
||
"""
|
||
if env_type == 'maxkb':
|
||
# 使用max_kb的子logger,这样日志会继承max_kb的配置
|
||
module_logger = logging.getLogger(f'max_kb.{module_name}')
|
||
# 确保子logger的级别不高于父logger
|
||
log_level = os.environ.get('MINERU_LOG_LEVEL', 'INFO')
|
||
if hasattr(logging, log_level):
|
||
module_logger.setLevel(getattr(logging, log_level))
|
||
return module_logger
|
||
elif env_type == 'gbase':
|
||
# 保持gbase的独立性
|
||
try:
|
||
from .gbase_adapter.logger import logger as gbase_logger
|
||
return gbase_logger
|
||
except ImportError:
|
||
pass
|
||
|
||
# 默认情况,创建独立的logger
|
||
module_logger = logging.getLogger(module_name)
|
||
# 确保使用正确的日志级别
|
||
module_logger.setLevel(logging.INFO)
|
||
return module_logger
|
||
|
||
# 为了兼容性,导出默认logger
|
||
logger = get_module_logger('mineru')
|
||
|
||
# 导出logging模块
|
||
logging_module = logging
|
||
|
||
# 导出接口
|
||
__all__ = ['logger', 'logging_module', 'get_module_logger', 'env_type']
|
||
# 为了兼容性,也导出logging
|
||
logging = logging_module |