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
相关推荐
ekprada1 小时前
DAY 16 数组的常见操作和形状
人工智能·python·机器学习
柳鲲鹏1 小时前
OpenCV: 光流法python代码
人工智能·python·opencv
databook1 小时前
别急着转投 Polars!Pandas 3.0 带着“黑科技”杀回来了
后端·python·数据分析
烟袅2 小时前
为什么调用 OpenAI Tools 后,还要再请求一次大模型?——从代码看 LLM 工具调用的本质
后端·python·llm
GeekPMAlex2 小时前
Python OOP 深度解析:从核心语法到高级模式
python
e***0962 小时前
SpringBoot下获取resources目录下文件的常用方法
java·spring boot·后端
Sunhen_Qiletian2 小时前
《Python开发之语言基础》第一集:python的语法元素
开发语言·python
速易达网络2 小时前
tensorflow+yolo图片训练和图片识别系统
人工智能·python·tensorflow
程序员小远2 小时前
如何搭建Appium环境?
自动化测试·软件测试·python·测试工具·职场和发展·appium·测试用例