mirror of
https://github.com/mjl-/mox.git
synced 2025-07-10 10:34:40 +03:00
when logging email addresses with IDNA domain and/or special characters or utf8 in localpart, log both native utf8 form and form with escape localpart and ascii-only domain
the idea is to make it clear from the logging if non-ascii characters are used. this is implemented by making mlog recognize if a field value that will be logged has a LogString method. if so, that value is logged. dns.Domain, smtp.Address, smtp.Localpart, smtp.Path now have a LogString method. some explicit calls to String have been replaced to LogString, and some %q formatting have been replaced with %s, because the escaped localpart would already have double quotes, and double doublequotes aren't easy to read.
This commit is contained in:
@ -75,6 +75,12 @@ const (
|
||||
LevelTracedata Level = 7
|
||||
)
|
||||
|
||||
// LogStringer is used when formatting field values during logging. If a value
|
||||
// implements it, LogString is called for the value to log.
|
||||
type LogStringer interface {
|
||||
LogString() string
|
||||
}
|
||||
|
||||
// Holds a map[string]Level, mapping a package (field pkg in logs) to a log level.
|
||||
// The empty string is the default/fallback log level.
|
||||
var config atomic.Value
|
||||
@ -262,6 +268,9 @@ func stringValue(iscid, nested bool, v any) string {
|
||||
return ""
|
||||
}
|
||||
|
||||
if r, ok := v.(LogStringer); ok {
|
||||
return r.LogString()
|
||||
}
|
||||
if r, ok := v.(fmt.Stringer); ok {
|
||||
return r.String()
|
||||
}
|
||||
|
Reference in New Issue
Block a user