""" 结构化日志模块 提供统一的日志接口,支持 JSON 格式输出和上下文信息 """ import json import sys import logging class StructuredLogger: """结构化日志包装器""" _logger = None @classmethod def get_logger(cls, name='app'): if cls._logger is None: cls._logger = logging.getLogger(name) return cls._logger @classmethod def configure(cls, config): """根据配置初始化日志系统""" logger = logging.getLogger() logger.setLevel(config.LOG_LEVEL) handler = logging.StreamHandler(sys.stdout) handler.setFormatter(logging.Formatter(config.LOG_FORMAT)) logger.handlers.clear() logger.addHandler(handler) cls._logger = logging.getLogger('app') @classmethod def info(cls, msg, **kwargs): cls.get_logger().info(f"{msg} {json.dumps(kwargs, ensure_ascii=False, default=str)}" if kwargs else msg) @classmethod def warning(cls, msg, **kwargs): cls.get_logger().warning(f"{msg} {json.dumps(kwargs, ensure_ascii=False, default=str)}" if kwargs else msg) @classmethod def error(cls, msg, **kwargs): cls.get_logger().error(f"{msg} {json.dumps(kwargs, ensure_ascii=False, default=str)}" if kwargs else msg) @classmethod def debug(cls, msg, **kwargs): cls.get_logger().debug(f"{msg} {json.dumps(kwargs, ensure_ascii=False, default=str)}" if kwargs else msg) log = StructuredLogger