github.com/anacrolix/generics v0.0.3-0.20240902042256-7fb2702ef0ca
        github.com/anacrolix/go-libutp v1.3.2
        github.com/anacrolix/gostdapp v0.1.0
-       github.com/anacrolix/log v0.15.3-0.20240627045001-cd912c641d83
+       github.com/anacrolix/log v0.16.1-0.20250429062012-9dd7c8a776c6
        github.com/anacrolix/missinggo v1.3.0
        github.com/anacrolix/missinggo/v2 v2.7.4
        github.com/anacrolix/multiless v0.4.0
 
 github.com/anacrolix/log v0.13.1/go.mod h1:D4+CvN8SnruK6zIFS/xPoRJmtvtnxs+CSfDQ+BFxZ68=
 github.com/anacrolix/log v0.14.1/go.mod h1:1OmJESOtxQGNMlUO5rcv96Vpp9mfMqXXbe2RdinFLdY=
 github.com/anacrolix/log v0.14.2/go.mod h1:1OmJESOtxQGNMlUO5rcv96Vpp9mfMqXXbe2RdinFLdY=
-github.com/anacrolix/log v0.15.3-0.20240627045001-cd912c641d83 h1:9o/yVzzLzYaBDFx8B27yhkvBLhNnRAuSTK7Y+yZKVtU=
-github.com/anacrolix/log v0.15.3-0.20240627045001-cd912c641d83/go.mod h1:xvHjsYWWP7yO8PZwtuIp/k0DBlu07pSJqH4SEC78Vwc=
+github.com/anacrolix/log v0.16.1-0.20250429062012-9dd7c8a776c6 h1:kTcPGxQKMFbbwK9HO4TcvF3g3hH/GdPZxtF00tk7kmg=
+github.com/anacrolix/log v0.16.1-0.20250429062012-9dd7c8a776c6/go.mod h1:m0poRtlr41mriZlXBQ9SOVZ8yZBkLjOkDhd5Li5pITA=
 github.com/anacrolix/lsan v0.0.0-20211126052245-807000409a62 h1:P04VG6Td13FHMgS5ZBcJX23NPC/fiC4cp9bXwYujdYM=
 github.com/anacrolix/lsan v0.0.0-20211126052245-807000409a62/go.mod h1:66cFKPCO7Sl4vbFnAaSq7e4OXtdMhRSBagJGWgmpJbM=
 github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df/go.mod h1:kwGiTUTZ0+p4vAz3VbAI5a30t2YbvemcmspjKwrAz5s=
 
                        t:               t,
                        lookupTrackerIp: t.cl.config.LookupTrackerIp,
                        stopCh:          make(chan struct{}),
+                       logger:          t.logger.WithNames("tracker").Slogger().With("urlKey", u.String()),
                }
                go newAnnouncer.Run()
                return newAnnouncer
 
        "context"
        "errors"
        "fmt"
+       "log/slog"
        "net"
        "net/url"
        "sync"
        "time"
 
        "github.com/anacrolix/dht/v2/krpc"
-       "github.com/anacrolix/log"
-
        "github.com/anacrolix/torrent/tracker"
 )
 
        t               *Torrent
        lastAnnounce    trackerAnnounceResult
        lookupTrackerIp func(*url.URL) ([]net.IP, error)
+       logger          *slog.Logger
 
        // TODO: chansync
        stopOnce sync.Once
        // closed.
        ctx, cancel := context.WithTimeout(ctx, tracker.DefaultTrackerAnnounceTimeout)
        defer cancel()
-       me.t.logger.WithDefaultLevel(log.Debug).Printf("announcing to %q: %#v", me.u.String(), req)
        res, err := tracker.Announce{
                Context:             ctx,
                HttpProxy:           me.t.cl.config.HTTPProxy,
                ClientIp6:           krpc.NodeAddr{IP: me.t.cl.config.PublicIp6},
                Logger:              me.t.logger,
        }.Do()
-       me.t.logger.WithDefaultLevel(log.Debug).Printf("announce to %q returned %#v: %v", me.u.String(), res, err)
        if err != nil {
+               me.logger.Warn("announce failed", "err", err)
                ret.Err = fmt.Errorf("announcing: %w", err)
                return
+       } else {
+               me.logger.Debug("announce returned", "numPeers", len(res.Peers))
        }
        me.t.AddPeers(peerInfos(nil).AppendFromTracker(res.Peers))
        ret.NumPeers = len(res.Peers)