all: allow verbose log when connecting to ControlD API

So troubleshooting will be easier in case of errors happened.
This commit is contained in:
Cuong Manh Le
2025-02-15 02:55:03 +07:00
committed by Cuong Manh Le
parent 7444d8517a
commit 0631ffe831
4 changed files with 16 additions and 4 deletions

View File

@@ -88,12 +88,15 @@ func initConsoleLogging() {
multi := zerolog.MultiLevelWriter(consoleWriter) multi := zerolog.MultiLevelWriter(consoleWriter)
l := mainLog.Load().Output(multi).With().Timestamp().Logger() l := mainLog.Load().Output(multi).With().Timestamp().Logger()
mainLog.Store(&l) mainLog.Store(&l)
switch { switch {
case silent: case silent:
zerolog.SetGlobalLevel(zerolog.NoLevel) zerolog.SetGlobalLevel(zerolog.NoLevel)
case verbose == 1: case verbose == 1:
ctrld.ProxyLogger.Store(&l)
zerolog.SetGlobalLevel(zerolog.InfoLevel) zerolog.SetGlobalLevel(zerolog.InfoLevel)
case verbose > 1: case verbose > 1:
ctrld.ProxyLogger.Store(&l)
zerolog.SetGlobalLevel(zerolog.DebugLevel) zerolog.SetGlobalLevel(zerolog.DebugLevel)
default: default:
zerolog.SetGlobalLevel(zerolog.NoticeLevel) zerolog.SetGlobalLevel(zerolog.NoticeLevel)

View File

@@ -529,7 +529,7 @@ func (uc *UpstreamConfig) newDOHTransport(addrs []string) *http.Transport {
for i := range addrs { for i := range addrs {
dialAddrs[i] = net.JoinHostPort(addrs[i], port) dialAddrs[i] = net.JoinHostPort(addrs[i], port)
} }
conn, err := pd.DialContext(ctx, network, dialAddrs) conn, err := pd.DialContext(ctx, network, dialAddrs, ProxyLogger.Load())
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -226,7 +226,7 @@ func apiTransport(cdDev bool) *http.Transport {
addrs[i] = net.JoinHostPort(ips[i], port) addrs[i] = net.JoinHostPort(ips[i], port)
} }
d := &ctrldnet.ParallelDialer{} d := &ctrldnet.ParallelDialer{}
return d.DialContext(ctx, network, addrs) return d.DialContext(ctx, network, addrs, ctrld.ProxyLogger.Load())
} }
if router.Name() == ddwrt.Name || runtime.GOOS == "android" { if router.Name() == ddwrt.Name || runtime.GOOS == "android" {
transport.TLSClientConfig = &tls.Config{RootCAs: certs.CACertPool()} transport.TLSClientConfig = &tls.Config{RootCAs: certs.CACertPool()}

View File

@@ -3,6 +3,7 @@ package net
import ( import (
"context" "context"
"errors" "errors"
"io"
"net" "net"
"os" "os"
"os/signal" "os/signal"
@@ -11,6 +12,7 @@ import (
"syscall" "syscall"
"time" "time"
"github.com/rs/zerolog"
"tailscale.com/logtail/backoff" "tailscale.com/logtail/backoff"
) )
@@ -26,7 +28,8 @@ var Dialer = &net.Dialer{
Dial: func(ctx context.Context, network, address string) (net.Conn, error) { Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
d := ParallelDialer{} d := ParallelDialer{}
d.Timeout = 10 * time.Second d.Timeout = 10 * time.Second
return d.DialContext(ctx, "udp", []string{v4BootstrapDNS, v6BootstrapDNS}) l := zerolog.New(io.Discard)
return d.DialContext(ctx, "udp", []string{v4BootstrapDNS, v6BootstrapDNS}, &l)
}, },
}, },
} }
@@ -137,7 +140,7 @@ type ParallelDialer struct {
net.Dialer net.Dialer
} }
func (d *ParallelDialer) DialContext(ctx context.Context, network string, addrs []string) (net.Conn, error) { func (d *ParallelDialer) DialContext(ctx context.Context, network string, addrs []string, logger *zerolog.Logger) (net.Conn, error) {
if len(addrs) == 0 { if len(addrs) == 0 {
return nil, errors.New("empty addresses") return nil, errors.New("empty addresses")
} }
@@ -157,11 +160,16 @@ func (d *ParallelDialer) DialContext(ctx context.Context, network string, addrs
for _, addr := range addrs { for _, addr := range addrs {
go func(addr string) { go func(addr string) {
defer wg.Done() defer wg.Done()
logger.Debug().Msgf("dialing to %s", addr)
conn, err := d.Dialer.DialContext(ctx, network, addr) conn, err := d.Dialer.DialContext(ctx, network, addr)
if err != nil {
logger.Debug().Msgf("failed to dial %s: %v", addr, err)
}
select { select {
case ch <- &parallelDialerResult{conn: conn, err: err}: case ch <- &parallelDialerResult{conn: conn, err: err}:
case <-done: case <-done:
if conn != nil { if conn != nil {
logger.Debug().Msgf("connection closed: %s", conn.RemoteAddr())
conn.Close() conn.Close()
} }
} }
@@ -172,6 +180,7 @@ func (d *ParallelDialer) DialContext(ctx context.Context, network string, addrs
for res := range ch { for res := range ch {
if res.err == nil { if res.err == nil {
cancel() cancel()
logger.Debug().Msgf("connected to %s", res.conn.RemoteAddr())
return res.conn, res.err return res.conn, res.err
} }
errs = append(errs, res.err) errs = append(errs, res.err)