mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2025-02-23 20:52:15 +08:00
chore: better dns logging
This commit is contained in:
parent
9e3589d638
commit
a05016a5da
@ -146,9 +146,12 @@ func (r *Resolver) ExchangeContext(ctx context.Context, m *D.Msg) (msg *D.Msg, e
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
q := m.Question[0]
|
q := m.Question[0]
|
||||||
|
domain := msgToDomain(m)
|
||||||
|
_, qTypeStr := msgToQtype(m)
|
||||||
cacheM, expireTime, hit := r.cache.GetWithExpire(q.String())
|
cacheM, expireTime, hit := r.cache.GetWithExpire(q.String())
|
||||||
if hit {
|
if hit {
|
||||||
log.Debugln("[DNS] cache hit for %s, expire at %s", q.Name, expireTime.Format("2006-01-02 15:04:05"))
|
ips := msgToIP(cacheM)
|
||||||
|
log.Debugln("[DNS] cache hit %s --> %s %s, expire at %s", domain, ips, qTypeStr, expireTime.Format("2006-01-02 15:04:05"))
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
msg = cacheM.Copy()
|
msg = cacheM.Copy()
|
||||||
if expireTime.Before(now) {
|
if expireTime.Before(now) {
|
||||||
|
17
dns/util.go
17
dns/util.go
@ -173,11 +173,20 @@ func msgToDomain(msg *D.Msg) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func msgToQtype(msg *D.Msg) (uint16, string) {
|
||||||
|
if len(msg.Question) > 0 {
|
||||||
|
qType := msg.Question[0].Qtype
|
||||||
|
return qType, D.Type(qType).String()
|
||||||
|
}
|
||||||
|
return 0, ""
|
||||||
|
}
|
||||||
|
|
||||||
func batchExchange(ctx context.Context, clients []dnsClient, m *D.Msg) (msg *D.Msg, cache bool, err error) {
|
func batchExchange(ctx context.Context, clients []dnsClient, m *D.Msg) (msg *D.Msg, cache bool, err error) {
|
||||||
cache = true
|
cache = true
|
||||||
fast, ctx := picker.WithTimeout[*D.Msg](ctx, resolver.DefaultDNSTimeout)
|
fast, ctx := picker.WithTimeout[*D.Msg](ctx, resolver.DefaultDNSTimeout)
|
||||||
defer fast.Close()
|
defer fast.Close()
|
||||||
domain := msgToDomain(m)
|
domain := msgToDomain(m)
|
||||||
|
qType, qTypeStr := msgToQtype(m)
|
||||||
var noIpMsg *D.Msg
|
var noIpMsg *D.Msg
|
||||||
for _, client := range clients {
|
for _, client := range clients {
|
||||||
if _, isRCodeClient := client.(rcodeClient); isRCodeClient {
|
if _, isRCodeClient := client.(rcodeClient); isRCodeClient {
|
||||||
@ -186,7 +195,7 @@ func batchExchange(ctx context.Context, clients []dnsClient, m *D.Msg) (msg *D.M
|
|||||||
}
|
}
|
||||||
client := client // shadow define client to ensure the value captured by the closure will not be changed in the next loop
|
client := client // shadow define client to ensure the value captured by the closure will not be changed in the next loop
|
||||||
fast.Go(func() (*D.Msg, error) {
|
fast.Go(func() (*D.Msg, error) {
|
||||||
log.Debugln("[DNS] resolve %s from %s", domain, client.Address())
|
log.Debugln("[DNS] resolve %s %s from %s", domain, qTypeStr, client.Address())
|
||||||
m, err := client.ExchangeContext(ctx, m)
|
m, err := client.ExchangeContext(ctx, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -195,9 +204,8 @@ func batchExchange(ctx context.Context, clients []dnsClient, m *D.Msg) (msg *D.M
|
|||||||
// so we would ignore RCode errors from RCode clients.
|
// so we would ignore RCode errors from RCode clients.
|
||||||
return nil, errors.New("server failure: " + D.RcodeToString[m.Rcode])
|
return nil, errors.New("server failure: " + D.RcodeToString[m.Rcode])
|
||||||
}
|
}
|
||||||
if ips := msgToIP(m); len(m.Question) > 0 {
|
ips := msgToIP(m)
|
||||||
qType := m.Question[0].Qtype
|
log.Debugln("[DNS] %s --> %s %s from %s", domain, ips, qTypeStr, client.Address())
|
||||||
log.Debugln("[DNS] %s --> %s %s from %s", domain, ips, D.Type(qType), client.Address())
|
|
||||||
switch qType {
|
switch qType {
|
||||||
case D.TypeAAAA:
|
case D.TypeAAAA:
|
||||||
if len(ips) == 0 {
|
if len(ips) == 0 {
|
||||||
@ -210,7 +218,6 @@ func batchExchange(ctx context.Context, clients []dnsClient, m *D.Msg) (msg *D.M
|
|||||||
return nil, resolver.ErrIPNotFound
|
return nil, resolver.ErrIPNotFound
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return m, nil
|
return m, nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user