Более безопасное логгирование *url.URL с паролем в user info

Есть некий *net/url.URL, который может содержать пароль в user info. Логгировать этот пароль не хочется. Есть ли какой-то встроенный способ сделать логгирование более безопасным?


Ответы (1 шт):

Автор решения: Ainar-G

Go 1.15 добавил метод *net/url.URL.Redacted, который работает как *net/url.URL.String, но заменяет пароль, если он есть, на xxxxx:

fmt.Println(u)
// Output:
//
//   https://user:[email protected]
fmt.Println(u.Redacted())
// Output:
//
//   https://user:[email protected]

Рекомендую сделать обёртку, чтобы метод String всегда возвращал URL без пароля:

type SecureURL url.URL

func (u *SecureURL) String() (s string) {
	return (*url.URL)(u).Redacted()
}

// …

fmt.Println(u)
// Output:
//
//   https://user:[email protected]
→ Ссылка