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
相关推荐
2401_89719055几秒前
如何在保留功能逻辑的前提下隐藏网页菜单项(CSS 隐藏
jvm·数据库·python
浪客川1 分钟前
【百例RUST - 011】简单键值对
开发语言·后端·rust
喜欢流萤吖~3 分钟前
SpringBoot 性能优化实战
spring boot·后端·性能优化
2501_914245933 分钟前
如何在phpMyAdmin中查询加密数据_AES_DECRYPT函数的实时解密展示
jvm·数据库·python
21439655 分钟前
如何防止SQL注入利用存储过程_确保存储过程不拼字符串
jvm·数据库·python
2301_764150568 分钟前
如何统计表单中已填写的特定类名输入框数量
jvm·数据库·python
常利兵10 分钟前
Spring Boot 搭建邮件发送系统:开启你的邮件自动化之旅
spring boot·后端·自动化
彭于晏Yan11 分钟前
Spring Boot 集成邮件服务实现发送邮件功能
java·spring boot·后端
2401_8971905511 分钟前
宝塔面板SSH提示连接被拒绝_检查服务器端口开关
jvm·数据库·python
浮尘笔记11 分钟前
Java Snowy 框架生产环境安全部署全流程(服务器篇)
java·运维·服务器·开发语言·后端