You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Loguru日志如何实现敏感数据脱敏处理

Loguru实现日志敏感数据脱敏的方案

Loguru无需仿照原生logging自定义Formatter/Handler,也不需要用自带的Filter(会直接删除整条日志),可通过以下两种方案实现仅替换敏感内容的脱敏效果:

方案1:自定义格式化函数(简单场景推荐)

直接在handler的format参数中传入自定义处理逻辑,在日志格式化后做脱敏替换:

from loguru import logger
import re
import sys

def desensitize(text: str) -> str:
    # 可根据需求扩展更多正则匹配规则,比如手机号、身份证、密钥等
    text = re.sub(r"pass: .*?", "pass: xxx", text)
    return text

# 移除Loguru默认自带的handler
logger.remove()
# 添加自定义输出handler
logger.add(
    sink=sys.stdout,
    level="INFO",
    # 先按规则格式化日志,再传入脱敏函数处理
    format=lambda record: desensitize(f"{record['time']:%Y-%m-%d %H:%M:%S} | {record['level']} | {record['message']}\n")
)

# 测试
logger.info("This is a demo and here is the pass: secret")

执行输出结果:
2024-xx-xx xx:xx:xx | INFO | This is a demo and here is the pass: xxx

方案2:使用patcher修改日志记录(复杂场景推荐)

如果需要处理日志extra字段、或者在格式化前就修改消息内容,可使用Loguru的patcher能力:

from loguru import logger
import re
import sys

def desensitize_patcher(record):
    # 脱敏消息内容
    record["message"] = re.sub(r"pass: .*?", "pass: xxx", record["message"])
    # 可额外处理extra中存储的敏感数据,举例:
    # if "phone" in record["extra"]:
    #     record["extra"]["phone"] = re.sub(r"1\d{10}", "1*******", record["extra"]["phone"])

# 移除默认handler
logger.remove()
# 注册patcher,所有日志都会先经过该函数处理
logger = logger.patch(desensitize_patcher)
# 添加输出handler
logger.add(
    sink=sys.stdout,
    level="INFO",
    format="{time:%Y-%m-%d %H:%M:%S} | {level} | {message}"
)

# 测试
logger.info("This is a demo and here is the pass: secret")

两种方案都可以实现和原生logging一致的脱敏效果,不会删除整条日志,仅替换敏感字段内容。

内容的提问来源于stack exchange,提问作者HeyMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:39:03