diff --git a/go.mod b/go.mod index 3506716..391fc4d 100644 --- a/go.mod +++ b/go.mod @@ -5,10 +5,13 @@ go 1.21 require ( github.com/IGLOU-EU/go-wildcard/v2 v2.0.2 github.com/coreos/go-iptables v0.7.0 + github.com/rs/zerolog v1.33.0 github.com/vishvananda/netlink v1.3.0 ) require ( + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/vishvananda/netns v0.0.4 // indirect - golang.org/x/sys v0.10.0 // indirect + golang.org/x/sys v0.24.0 // indirect ) diff --git a/group.go b/group.go index d60587c..34fcfd2 100644 --- a/group.go +++ b/group.go @@ -45,7 +45,7 @@ DomainSearch: Replace: true, }) if err != nil { - return fmt.Errorf("failed to assign address %s with %s ipset: %w", address, g.ipsetName, err) + return fmt.Errorf("failed to assign address: %w", err) } break DomainSearch } diff --git a/kvas2.go b/kvas2.go index ae3e6d9..ddec60e 100644 --- a/kvas2.go +++ b/kvas2.go @@ -4,7 +4,6 @@ import ( "context" "errors" "fmt" - "log" "net" "sync" "time" @@ -12,6 +11,8 @@ import ( "kvas2-go/models" "kvas2-go/pkg/dns-proxy" "kvas2-go/pkg/iptables-helper" + + "github.com/rs/zerolog/log" ) var ( @@ -150,6 +151,12 @@ func (a *App) ListInterfaces() ([]net.Interface, error) { } func (a *App) processARecord(aRecord dnsProxy.Address) { + log.Trace(). + Str("name", aRecord.Name.String()). + Str("address", aRecord.Address.String()). + Int("ttl", int(aRecord.TTL)). + Msg("processing a record") + ttlDuration := time.Duration(aRecord.TTL) * time.Second if ttlDuration < a.Config.MinimalTTL { ttlDuration = a.Config.MinimalTTL @@ -161,8 +168,12 @@ func (a *App) processARecord(aRecord dnsProxy.Address) { for _, group := range a.Groups { err := group.HandleIPv4(names, aRecord.Address, ttlDuration) if err != nil { - // TODO: Error log level - log.Printf("failed to handle address: %v", err) + log.Error(). + Str("name", aRecord.Name.String()). + Str("address", aRecord.Address.String()). + Int("group", group.ID). + Err(err). + Msg("failed to handle address") } } } diff --git a/main.go b/main.go index d08140c..5e74c8d 100644 --- a/main.go +++ b/main.go @@ -2,15 +2,18 @@ package main import ( "context" - "fmt" - "log" + "github.com/rs/zerolog" "os" "os/signal" "syscall" "time" + + "github.com/rs/zerolog/log" ) func main() { + log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) + app, err := New(Config{ MinimalTTL: time.Hour, ChainPostfix: "KVAS2_", @@ -19,7 +22,7 @@ func main() { ListenPort: 7548, }) if err != nil { - log.Fatalf("failed to initialize application: %v", err) + log.Fatal().Err(err).Msg("failed to initialize application") } ctx, cancel := context.WithCancel(context.Background()) @@ -31,7 +34,7 @@ func main() { }() - fmt.Println("Started service...") + log.Info().Msg("starting service") c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, syscall.SIGTERM) @@ -39,13 +42,12 @@ func main() { for { select { case appErrs, _ := <-appErrsChan: - for _, err := range appErrs { - // TODO: Error log level - log.Printf("failed to start application: %v", err) + for _, err = range appErrs { + log.Error().Err(err).Msg("failed to start application") } return case <-c: - fmt.Println("Graceful shutdown...") + log.Info().Msg("shutting down service") cancel() } } diff --git a/pkg/dns-proxy/dns-proxy.go b/pkg/dns-proxy/dns-proxy.go index 83d3422..ce3e189 100644 --- a/pkg/dns-proxy/dns-proxy.go +++ b/pkg/dns-proxy/dns-proxy.go @@ -4,10 +4,11 @@ import ( "context" "errors" "fmt" - "log" "net" "os" "time" + + "github.com/rs/zerolog/log" ) const ( @@ -40,7 +41,7 @@ func (p DNSProxy) Listen(ctx context.Context) error { if p.udpConn != nil { err := p.udpConn.Close() if err != nil { - log.Printf("failed to close UDP connection: %v", err) + log.Error().Err(err).Msg("failed to close UDP connection") } } }() @@ -53,7 +54,7 @@ func (p DNSProxy) Listen(ctx context.Context) error { buffer := make([]byte, DNSMaxUDPPackageSize) n, clientAddr, err := p.udpConn.ReadFromUDP(buffer) if err != nil { - log.Printf("failed to read UDP packet: %v", err) + log.Error().Err(err).Msg("failed to read UDP packet") continue } @@ -65,22 +66,20 @@ func (p DNSProxy) Listen(ctx context.Context) error { func (p DNSProxy) handleDNSRequest(clientAddr *net.UDPAddr, buffer []byte) { conn, err := net.Dial("udp", p.targetDNSServerAddress) if err != nil { - log.Printf("failed to dial target DNS: %v", err) + log.Error().Err(err).Msg("failed to dial target DNS") return } defer conn.Close() _, err = conn.Write(buffer) if err != nil { - // TODO: Error log level - log.Printf("failed to send request to target DNS: %v", err) + log.Error().Err(err).Msg("failed to send request to target DNS") return } err = conn.SetReadDeadline(time.Now().Add(5 * time.Second)) if err != nil { - // TODO: Error log level - log.Printf("failed to set read deadline: %v", err) + log.Error().Err(err).Msg("failed to set read deadline") return } @@ -92,8 +91,7 @@ func (p DNSProxy) handleDNSRequest(clientAddr *net.UDPAddr, buffer []byte) { return } - // TODO: Error log level - log.Printf("failed to read response from target DNS: %v", err) + log.Error().Err(err).Msg("failed to read response from target DNS") return } @@ -103,14 +101,12 @@ func (p DNSProxy) handleDNSRequest(clientAddr *net.UDPAddr, buffer []byte) { p.MsgHandler(msg) } } else { - // TODO: Warn log level - log.Printf("error while parsing DNS message: %v", err) + log.Warn().Err(err).Msg("error while parsing DNS message") } _, err = p.udpConn.WriteToUDP(response[:n], clientAddr) if err != nil { - // TODO: Error log level - log.Printf("failed to send DNS message: %v", err) + log.Error().Err(err).Msg("failed to send DNS message") return } }