| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | package logimport (	"net"	"strings"	"time")type DNSLog struct {	Server  string	Domain  string	Result  []net.IP	Status  dnsStatus	Elapsed time.Duration	Error   error}func (l *DNSLog) String() string {	builder := &strings.Builder{}	// Server got answer: domain -> [ip1, ip2] 23ms	builder.WriteString(l.Server)	builder.WriteString(" ")	builder.WriteString(string(l.Status))	builder.WriteString(" ")	builder.WriteString(l.Domain)	builder.WriteString(" -> [")	builder.WriteString(joinNetIP(l.Result))	builder.WriteString("]")	if l.Elapsed > 0 {		builder.WriteString(" ")		builder.WriteString(l.Elapsed.String())	}	if l.Error != nil {		builder.WriteString(" <")		builder.WriteString(l.Error.Error())		builder.WriteString(">")	}	return builder.String()}type dnsStatus stringvar (	DNSQueried  = dnsStatus("got answer:")	DNSCacheHit = dnsStatus("cache HIT:"))func joinNetIP(ips []net.IP) string {	if len(ips) == 0 {		return ""	}	sips := make([]string, 0, len(ips))	for _, ip := range ips {		sips = append(sips, ip.String())	}	return strings.Join(sips, ", ")}
 |