eagleye

企业级Python日志与环境变量管理系统文档

企业级Python日志与环境变量管理系统文档

一、概述

本系统整合了企业级日志记录与环境变量管理功能,通过统一的create_enterprise_logger接口提供灵活、安全的日志配置,并保留原有环境变量管理能力(get_environment_variable等函数)。核心目标是解决传统日志系统配置复杂、异常追踪困难、敏感信息泄露等问题,为生产环境提供稳定、可维护的日志与配置管理方案。

二、核心功能与优化亮点

2.1 统一日志创建接口

通过create_enterprise_logger函数替代传统分散的日志配置代码,实现日志系统的标准化初始化。支持以下核心能力:

  • 智能命名:自动获取调用模块名称作为日志记录器名称(如app.core),避免手动命名的冗余。
  • 灵活配置:支持日志级别、控制台输出、颜色开关、日志目录等参数自定义。
  • 文件轮转:默认按天轮转日志文件(每天午夜),保留最近30天的日志,避免磁盘空间耗尽。
  • 全局异常捕获:内置未捕获异常处理逻辑,自动记录异常上下文信息。
  • 初始化日志:记录日志系统启动信息(如日志级别、目录路径),便于问题排查。

2.2 企业级日志特性

功能模块

描述

彩色控制台输出

不同日志级别(DEBUG/INFO/WARNING/ERROR/CRITICAL)使用颜色区分(青/绿/黄/红/紫),提升可读性。

结构化文件日志

文件日志包含详细上下文(文件名、行号),格式为时间 [级别] 记录器: 消息 (文件:行号)。

全局异常处理

自动捕获未处理的全局异常(如ZeroDivisionError),记录异常类型、消息及堆栈信息。

多环境兼容

支持开发(DEBUG级别)、测试(INFO级别)、生产(WARNING级别)等多环境配置。

2.3 环境变量管理能力(保留原有功能)

通过get_environment_variable及衍生函数(get_typed_environment_variable等),提供:

  • 多级环境覆盖:支持系统环境变量、.env.local、.env文件三级加载,优先级明确。
  • 敏感信息屏蔽:日志和控制台输出中自动屏蔽密钥、密码等敏感字段(如ab****yz)。
  • 类型安全转换:支持bool、int、list等类型自动转换(如"true"→True,"a,b"→["a","b"])。

三、核心函数详解

3.1create_enterprise_logger:创建企业级日志记录器

def create_enterprise_logger(

logger_name: Optional[str] = None,

log_level: Union[str, int] = logging.INFO,

log_dir: Union[str, Path] = "logs",

log_file_name: Optional[str] = None,

console_output: bool = True,

console_color: bool = True,

enable_global_exception: bool = True

) -> logging.Logger

参数说明:

参数

类型

描述

logger_name

Optional[str]

日志记录器名称(默认使用调用模块名,如app.core)。

log_level

Union[str, int]

日志级别(如DEBUG、INFO,默认INFO)。

log_dir

Union[str, Path]

日志文件目录(默认logs)。

log_file_name

Optional[str]

日志文件名(默认[logger_name].log)。

console_output

bool

是否启用控制台输出(默认True)。

console_color

bool

控制台是否使用颜色输出(默认True)。

enable_global_exception

bool

是否启用全局异常捕获(默认True)。

执行流程:

1. 智能命名:若未指定logger_name,自动获取调用模块名称(如my_module.py的__name__为my_module)。

2. 去重配置:若日志记录器已存在处理器(避免重复初始化),直接返回。

3. 级别设置:支持字符串(如"DEBUG")或logging常量(如logging.DEBUG)设置日志级别。

4. 格式器创建:控制台使用彩色格式器(可选),文件使用含文件/行号的详细格式器。

5. 文件处理器:按天轮转日志文件(保留30天),存储路径为log_dir/[logger_name].log。

6. 控制台处理器:输出到标准输出(sys.stdout),支持颜色开关。

7. 异常捕获:注册全局异常钩子(sys.excepthook),记录未捕获异常。

8. 初始化日志:记录日志系统启动信息(如日志级别、目录路径)。

3.2 环境变量管理函数(保留原有功能)

3.2.1get_environment_variable:基础环境变量获取

def get_environment_variable(

name: str,

default: Optional[Any] = None,

required: bool = False,

sensitive: bool = False

) -> str

功能:从系统环境变量、.env.local、.env文件三级获取变量值,支持默认值、必需检查、敏感信息屏蔽。

3.2.2get_typed_environment_variable:类型安全获取

def get_typed_environment_variable(

name: str,

var_type: type = str,

default: Optional[Any] = None,

required: bool = False,

sensitive: bool = False

) -> Any

功能:在get_environment_variable基础上,自动转换为目标类型(如bool、int),支持类型转换失败时使用默认值。

四、使用示例

4.1 初始化日志记录器(项目入口)

# main.py

from logger import create_enterprise_logger

# 创建主日志记录器(DEBUG级别,带颜色控制台输出)

logger = create_enterprise_logger(

logger_name="app.main",

log_level="DEBUG",

log_dir="/var/logs/myapp",

console_color=True

)

logger.info("应用启动完成", extra={"version": "1.0.0"})

4.2 业务代码中使用日志

# user_service.py

from .logger import logger # 从项目入口导入已初始化的logger

def user_login(user: str):

logger.debug(f"用户 {user} 尝试登录") # DEBUG级(开发时可见)

# ... 业务逻辑 ...

if login_success:

logger.info(f"用户 {user} 登录成功", extra={"ip": "192.168.1.100"}) # INFO级(生产可见)

else:

logger.warning(f"用户 {user} 登录失败(密码错误)") # WARNING级(需关注)

4.3 环境变量获取与设置

from env_manager import get_typed_environment_variable, set_environment_variable

# 设置环境变量(持久化到系统配置)

set_environment_variable(

"DB_URL",

"postgres://user:pass@prod-db:5432/main",

persist=True # 持久化到系统(如/etc/environment)

)

# 获取布尔类型环境变量(自动转换)

debug_mode = get_typed_environment_variable(

"DEBUG_MODE",

var_type=bool,

default=False # 默认关闭调试模式

)

# 获取敏感变量(日志中自动屏蔽)

api_key = get_environment_variable("API_KEY", sensitive=True)

logger.info(f"API_KEY已加载: {api_key}") # 日志显示为"ab****yz"

4.4 异常捕获与记录

# 未捕获异常自动记录(无需额外代码)

def risky_operation():

1 / 0 # 触发ZeroDivisionError

risky_operation() # 未处理异常,自动被日志系统捕获并记录

# 手动捕获异常并记录

try:

result = 10 / 0

except Exception as e:

logger.exception("计算失败(手动捕获)") # 记录异常堆栈信息

五、企业级最佳实践

5.1 日志配置策略

环境

推荐配置

开发环境

log_level=DEBUG,console_output=True,console_color=True(便于调试)。

测试环境

log_level=INFO,console_output=False(避免干扰测试),log_dir=/var/logs/test。

生产环境

log_level=WARNING,console_output=False(减少I/O),enable_global_exception=True(关键异常告警)。

5.2 敏感信息保护

  • 标记敏感变量:所有密钥、密码类变量设置sensitive=True(如get_environment_variable("API_KEY", sensitive=True))。
  • 日志过滤:在文件处理器中添加自定义过滤器,二次检查敏感字段(如password、token),确保无明文泄露。
  • 异步日志:高并发场景下,使用QueueHandler实现异步写日志(避免I/O阻塞主线程)。
  • 日志轮转策略:生产环境建议按天轮转(when="midnight"),避免大文件导致的存储和查询问题。
  • ELK集成:将JSON格式日志(需扩展create_enterprise_logger支持)通过Logstash导入Elasticsearch,使用Kibana可视化分析。
  • 告警规则:监控CRITICAL级日志(如未捕获异常)和MISSING_REQUIRED_ENV事件(环境变量缺失),通过邮件/钉钉实时告警。

5.3 性能优化建议

5.4 监控集成

六、总结

本系统通过create_enterprise_logger统一日志配置接口,结合环境变量管理功能,为企业级应用提供了安全、灵活、可维护的日志与配置管理方案。开发者可根据业务需求灵活调整日志级别、输出方式,同时通过敏感信息屏蔽、全局异常捕获等特性,显著降低生产环境的故障风险。

 

posted on 2025-07-08 14:16  GoGrid  阅读(18)  评论(0)    收藏  举报

导航