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
相关推荐
初次攀爬者1 分钟前
RocketMQ 消息可靠性保障与堆积处理
后端·消息队列·rocketmq
ygxb7 分钟前
如何去创建一个规范化的Agent SKIll?
后端·ai编程·claude
曲幽12 分钟前
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
redis·python·fastapi·web·httpx·lock·asyncio
JxWang0535 分钟前
Task01:环境搭建,初识数据库
后端
周杰伦jc35 分钟前
RocketMQ 完全指南:从入门到原理到生产实战、八股面试
后端
小码哥_常35 分钟前
Java可执行JAR包打包大揭秘:三种方式全解析
后端
掘金者阿豪35 分钟前
Halo的“傻瓜建站魔法”:cpolar内网穿透实验室第637个成功挑战
后端
koddnty37 分钟前
c++协程控制流深入剖析
后端·架构
小码哥_常40 分钟前
Spring Boot 集成DFA:打造高效内容安全卫士
后端
砍材农夫41 分钟前
接口限流设计
后端