保障golang应用日志安全,避免敏感信息泄露至关重要。本文介绍几种常见的Golang日志脱敏方法:
方法一:正则表达式替换
package main import ( "fmt" "log" "regexp" ) func main() { logMessage := "用户使用邮箱 user@example.com 和密码 123456 登录" // 定义敏感信息正则表达式 emailRegex := regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}`) passwordRegex := regexp.MustCompile(`d{6}`) // 替换敏感信息 maskedMessage := emailRegex.ReplaceAllString(logMessage, "****@****") maskedMessage = passwordRegex.ReplaceAllString(maskedMessage, "******") log.Println(maskedMessage) }
方法二:第三方库辅助
立即学习“go语言免费学习笔记(深入)”;
一些日志库如logrus和zap提供更便捷的脱敏功能。
使用logrus:
package main import ( "github.com/sirupsen/logrus" "regexp" ) func main() { logrus.SetFormatter(&logrus.TextFormatter{ DisableColors: true, FullTimestamp: true, }) logMessage := "用户使用邮箱 user@example.com 和密码 123456 登录" // 定义敏感信息正则表达式 emailRegex := regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}`) passwordRegex := regexp.MustCompile(`d{6}`) // 替换敏感信息 maskedMessage := emailRegex.ReplaceAllString(logMessage, "****@****") maskedMessage = passwordRegex.ReplaceAllString(maskedMessage, "******") logrus.Info(maskedMessage) }
使用zap:
package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "regexp" ) func main() { logger, _ := zap.NewProduction() defer logger.Sync() logMessage := "用户使用邮箱 user@example.com 和密码 123456 登录" // 定义敏感信息正则表达式 emailRegex := regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}`) passwordRegex := regexp.MustCompile(`d{6}`) // 替换敏感信息 maskedMessage := emailRegex.ReplaceAllString(logMessage, "****@****") maskedMessage = passwordRegex.ReplaceAllString(maskedMessage, "******") logger.Info(maskedMessage) }
方法三:自定义日志格式化器
创建自定义格式化器,在日志输出前处理敏感信息。
package main import ( "log" "regexp" "time" ) type CustomFormatter struct { logger *log.Logger } func NewCustomFormatter(logger *log.Logger) *CustomFormatter { return &CustomFormatter{logger: logger} } func (f *CustomFormatter) Format(entry *log.LogRecord) ([]byte, error) { logMessage := entry.Message emailRegex := regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}`) passwordRegex := regexp.MustCompile(`d{6}`) maskedMessage := emailRegex.ReplaceAllString(logMessage, "****@****") maskedMessage = passwordRegex.ReplaceAllString(maskedMessage, "******") return []byte(time.Now().Format(time.RFC3339) + " " + maskedMessage + "n"), nil } func main() { logger := log.New(log.Writer(), "", log.LstdFlags) customFormatter := NewCustomFormatter(logger) logger.SetOutput(customFormatter) logMessage := "用户使用邮箱 user@example.com 和密码 123456 登录" logger.Println(logMessage) }
选择最适合项目需求的方法,有效保护敏感信息。 记住根据实际情况调整正则表达式以匹配不同的敏感信息类型。