How do I mask sensitive data using slog in Go?

In Go, you can use the slog package to log messages, and when dealing with sensitive data, it's crucial to mask or redact this information to protect privacy. Below is a simple example of how to mask sensitive data during logging.


package main

import (
    "log"
    "strings"

    "golang.org/x/exp/slog"
)

// MaskSensitiveData masks the sensitive data in the given string
func MaskSensitiveData(data string) string {
    // Example: Masking emails
    if strings.Contains(data, "@") {
        parts := strings.Split(data, "@")
        return parts[0][:1] + "****@" + parts[1]
    }
    return data
}

func main() {
    logger := slog.New(slog.NewJSONHandler(os.Stdout))

    // Sensitive information
    email := "user@example.com"

    // Log masked email
    logger.Info("Processing user data", slog.String("email", MaskSensitiveData(email)))
}
    

Keywords: Go slog mask sensitive data logging privacy redaction