flask处理所有logging

需求

需要将所有的log的出现的手机号进行打码,使用 * 代替中间的4位数

方案

应尽量减小对原油代码的影响,所以应当重写logging的核心输出模块,在重写度的过程中对数据进行处理;

实现

logging 的处理字串的核心部分为 logging.Logger._log ;因此需要在这个核心模块上增加装饰器,

python 复制代码
import re
import logging
from functools import wraps
# 重写logging模块,全局生效
def override_logging():
    original_log = logging.Logger._log

    @wraps(original_log)
    def new_log(self, level, msg, args, **kwargs):
        msg = mask_sensitive_info(msg)
        if isinstance(msg, str):
            if args:
                if isinstance(args, tuple):
                    args = tuple([mask_sensitive_info(text) for text in args])
        return original_log(self, level, msg, args, **kwargs)

    logging.Logger._log = new_log

在标记内容时

python 复制代码
def mask_sensitive_info(text: str) -> str:
    """
    敏感信息打码规则:
    - 手机号:中间4位打码(138****5678)
    """
    if not text:
        return text
    if type(text) != str:  # 这里会有很多其他类型的,所以需要排除一下
        return text
    # 手机号打码
    phone_pattern = re.compile(r'(1\d{10})')
    text = phone_pattern.sub(lambda m: f"{m.group(1)[:3]}****{m.group(1)[7:]}", text)

    return text
相关推荐
小小测试开发8 小时前
安装 Python 3.10+
开发语言·人工智能·python
梦想不只是梦与想8 小时前
Python 中的装饰器
python·装饰器
我叫唧唧波9 小时前
Python+AI 全栈学习笔记
人工智能·python·学习
copyer_xyf9 小时前
Python 异常处理
前端·后端·python
麻雀飞吧10 小时前
期货多合约策略目标持仓怎么更新才不乱
python·区块链
Cthy_hy10 小时前
拓扑排序超详解:原理 + Kahn 贪心算法
python·算法·贪心算法
LSssT.10 小时前
【01】Python 机器学习
开发语言·python
为爱停留10 小时前
给智能体装上「刹车」:中断(Interrupts)与人工审批全解析
python
llz_11210 小时前
web-第三次课后作业
前端·后端·web
l1t11 小时前
DeepSeek总结的使用实体-组件-系统和基于存在性处理进行Python编程39-40
开发语言·python