github.com/eagleql/xray-core@v1.4.4/common/log/dns.go (about) 1 package log 2 3 import ( 4 "net" 5 "strings" 6 "time" 7 ) 8 9 type DNSLog struct { 10 Server string 11 Domain string 12 Result []net.IP 13 Status dnsStatus 14 Elapsed time.Duration 15 Error error 16 } 17 18 func (l *DNSLog) String() string { 19 builder := &strings.Builder{} 20 21 // Server got answer: domain -> [ip1, ip2] 23ms 22 builder.WriteString(l.Server) 23 builder.WriteString(" ") 24 builder.WriteString(string(l.Status)) 25 builder.WriteString(" ") 26 builder.WriteString(l.Domain) 27 builder.WriteString(" -> [") 28 builder.WriteString(joinNetIP(l.Result)) 29 builder.WriteString("]") 30 31 if l.Elapsed > 0 { 32 builder.WriteString(" ") 33 builder.WriteString(l.Elapsed.String()) 34 } 35 if l.Error != nil { 36 builder.WriteString(" <") 37 builder.WriteString(l.Error.Error()) 38 builder.WriteString(">") 39 } 40 return builder.String() 41 } 42 43 type dnsStatus string 44 45 var ( 46 DNSQueried = dnsStatus("got answer:") 47 DNSCacheHit = dnsStatus("cache HIT:") 48 ) 49 50 func joinNetIP(ips []net.IP) string { 51 if len(ips) == 0 { 52 return "" 53 } 54 sips := make([]string, 0, len(ips)) 55 for _, ip := range ips { 56 sips = append(sips, ip.String()) 57 } 58 return strings.Join(sips, ", ") 59 }