From: Matt Joiner Date: Tue, 27 May 2025 14:28:46 +0000 (+1000) Subject: Derive PeerConn logger from Torrent after setTorrent X-Git-Tag: v1.59.0~106 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=c3b1b909856b4285745ee2286931f72f44a848d6;p=btrtrc.git Derive PeerConn logger from Torrent after setTorrent --- diff --git a/client.go b/client.go index 3bd5fa48..f7ee73e7 100644 --- a/client.go +++ b/client.go @@ -1735,8 +1735,7 @@ func (cl *Client) newConnection(nc net.Conn, opts newConnectionOpts) (c *PeerCon } c.legacyPeerImpl = c c.peerImpl = c - c.logger = cl.logger.WithDefaultLevel(log.Warning).WithContextText(fmt.Sprintf("%T %p", c, c)) - c.protocolLogger = c.logger.WithNames(protocolLoggingName) + c.setPeerLoggers(cl.logger, cl.slogger) c.setRW(connStatsReadWriter{nc, c}) c.r = &rateLimitedReader{ l: cl.config.DownloadRateLimiter, diff --git a/peer.go b/peer.go index 530631ec..988eb07b 100644 --- a/peer.go +++ b/peer.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "io" + "log/slog" "net" "strings" "sync" @@ -95,7 +96,8 @@ type ( PeerMaxRequests maxRequests // Maximum pending requests the peer allows. - logger log.Logger + logger log.Logger + slogger *slog.Logger } PeerSource string diff --git a/peerconn.go b/peerconn.go index 6c643f83..d72e00f3 100644 --- a/peerconn.go +++ b/peerconn.go @@ -7,6 +7,7 @@ import ( "errors" "fmt" "io" + "log/slog" "math/rand" "net" "net/netip" @@ -1119,13 +1120,14 @@ func (c *PeerConn) sendChunk(r Request, msg func(pp.Message) bool, state *peerRe }) } -func (c *Peer) setTorrent(t *Torrent) { +func (c *PeerConn) setTorrent(t *Torrent) { if c.t != nil { panic("connection already associated with a torrent") } c.t = t c.logger.WithDefaultLevel(log.Debug).Printf("set torrent=%v", t) - t.reconcileHandshakeStats(c) + c.setPeerLoggers(t.logger, t.slogger()) + t.reconcileHandshakeStats(c.peerPtr()) } func (c *PeerConn) pexPeerFlags() pp.PexPeerFlags { @@ -1458,3 +1460,11 @@ func (me *PeerConn) peerPtr() *Peer { func (cn *PeerConn) nominalMaxRequests() maxRequests { return max(1, min(cn.PeerMaxRequests, cn.peakRequests*2, maxLocalToRemoteRequests)) } + +// Set the Peer loggers. This is given Client loggers, and later Torrent loggers when the Torrent is +// set. +func (me *PeerConn) setPeerLoggers(a log.Logger, s *slog.Logger) { + me.Peer.logger = a.WithDefaultLevel(log.Warning).WithContextText(fmt.Sprintf("%T %p", me, me)) + me.Peer.slogger = s.With(fmt.Sprintf("%T", me), fmt.Sprintf("%p", me)) + me.protocolLogger = me.logger.WithNames(protocolLoggingName) +} diff --git a/torrent.go b/torrent.go index a3a484eb..d68c3f49 100644 --- a/torrent.go +++ b/torrent.go @@ -3060,6 +3060,7 @@ func (t *Torrent) addWebSeed(url string, opts ...AddWebSeedsOpt) bool { f(&ws.peer) } ws.peer.logger = t.logger.WithContextValue(&ws).WithNames("webseed") + ws.peer.slogger = t.slogger().With("webseed", url) // TODO: Abstract out a common struct initializer for this... ws.peer.legacyPeerImpl = &ws ws.peer.peerImpl = &ws diff --git a/webseed-peer.go b/webseed-peer.go index 43bb78e3..bedbb927 100644 --- a/webseed-peer.go +++ b/webseed-peer.go @@ -134,7 +134,7 @@ func (ws *webseedPeer) spawnRequest(begin, end RequestIndex) { } ws.activeRequests[&wsReq] = struct{}{} ws.peer.t.cl.numWebSeedRequests++ - ws.peer.logger.Slogger().Debug( + ws.slogger().Debug( "starting webseed request", "begin", begin, "end", end, @@ -362,5 +362,5 @@ func (cn *webseedPeer) peerHasAllPieces() (all, known bool) { } func (me *webseedPeer) slogger() *slog.Logger { - return me.peer.logger.Slogger() + return me.peer.slogger }