diff --git a/component/outbound/dialer/alive_dialer_set.go b/component/outbound/dialer/alive_dialer_set.go index a6bbfe1..6b2c4ac 100644 --- a/component/outbound/dialer/alive_dialer_set.go +++ b/component/outbound/dialer/alive_dialer_set.go @@ -84,13 +84,16 @@ func (a *AliveDialerSet) SetAlive(dialer *Dialer, alive bool) { var ( latency time.Duration hasLatency bool + minPolicy bool ) switch a.selectionPolicy { case consts.DialerSelectionPolicy_MinLastLatency: latency, hasLatency = dialer.Latencies10.LastLatency() + minPolicy = true case consts.DialerSelectionPolicy_MinAverage10Latencies: latency, hasLatency = dialer.Latencies10.AvgLatency() + minPolicy = true } if alive { @@ -128,8 +131,9 @@ func (a *AliveDialerSet) SetAlive(dialer *Dialer, alive bool) { // This dialer is already not alive. } } - oldBestDialer := a.minLatency.dialer + if hasLatency { + oldBestDialer := a.minLatency.dialer // Calc minLatency. a.dialerToLatency[dialer] = latency if latency < a.minLatency.latency { @@ -144,7 +148,7 @@ func (a *AliveDialerSet) SetAlive(dialer *Dialer, alive bool) { a.log.Infof("Group [%v] switched dialer to <%v> (%v): %v", a.dialerGroupName, a.minLatency.dialer.Name(), a.selectionPolicy, a.minLatency.latency) } } else { - if alive && a.minLatency.dialer == nil { + if alive && minPolicy && a.minLatency.dialer == nil { // Use first dialer if no dialer has alive state. a.minLatency.dialer = dialer a.log.Infof("Group [%v] switched dialer to <%v>", a.dialerGroupName, a.minLatency.dialer.Name()) diff --git a/example.conf b/example.conf index e276c26..2d13598 100644 --- a/example.conf +++ b/example.conf @@ -55,7 +55,7 @@ group { routing { domain(geosite:category-ads) -> block - l4proto(udp) && mac('02:42:ac:11:00:03') -> BT + l4proto(udp) && mac('02:42:ac:11:00:03') -> my_group domain(geosite:category-ads) -> block domain(geosite:disney) -> disney domain(geosite:netflix) -> netflix diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go index b38f7be..1059380 100644 --- a/pkg/logger/logger.go +++ b/pkg/logger/logger.go @@ -16,6 +16,8 @@ func NewLogger(verbose int) *logrus.Logger { level = logrus.WarnLevel case 1: level = logrus.InfoLevel + case 2: + level = logrus.DebugLevel default: level = logrus.TraceLevel }