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
相关推荐
架构师沉默几秒前
Java 终于有自己的 AI Agent 框架了?
java·后端·架构
秋水无痕8 分钟前
# 手把手教你从零搭建 AI 对话系统 - React + Spring Boot 实战(一)
前端·后端
秋水无痕16 分钟前
# 手把手教你从零搭建 AI 对话系统 - React + Spring Boot 实战(二)
前端·后端·面试
Master_Azur21 分钟前
java内部类与匿名内部类
后端
开心就好202527 分钟前
不依赖 Mac 也能做 iOS 开发?跨设备开发流程
后端·ios
一只叫煤球的猫28 分钟前
RAG 如何落地?从原理解释到工程实现
人工智能·后端·ai编程
敏编程31 分钟前
一天一个Python库:tomlkit - 轻松解析和操作TOML配置
python
2401_8796938736 分钟前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python
卷心菜投手ovo39 分钟前
一个页面支持自定义字段,后端该怎么设计数据库?
后端
yunyun3212343 分钟前
机器学习模型部署:将模型转化为Web API
jvm·数据库·python