feat: enhance logging with stream and lease context

- Add stream_id to error logs in client.go for better traceability of stream-related failures - Include lease_id in client and server error messages to link logs to specific leases - Introduce debug logs for successful lease update and deletion in handlers.go - Update completion message for connection forwarding in handlers.go for clarityfeat: enhance logging with stream and lease identifiers - Add `stream_id` to error logs in `client.go` for improved stream tracing in packet read failures - Include `lease_id` in error messages across `client.go` and `handlers.go` to correlate logs with specific leases - Add debug logs for successful lease update and deletion completions in `handlers.go` - Refine connection forwarding completion message in `handlers.go` for better readability

lemon-mint committed Oct 28, 2025 at 15:49 UTC cfd69c01b88cea729b0547b95f3dcd594be652ea
3 files changed +27 -10
relaydns/client.go
+7 -3
@@ -197,7 +197,7 @@ func (g *RelayClient) handleConnectionRequestStream(stream *yamux.Stream) {
197
198 pkt, err := readPacket(stream)
199 if err != nil {
200 - log.Error().Err(err).Msg("[RelayClient] Failed to read packet from stream")
200 + log.Error().Uint32("stream_id", stream.StreamID()).Err(err).Msg("[RelayClient] Failed to read packet from stream")
201 stream.Close()
202 return
203 }
@@ -368,16 +368,19 @@ func (g *RelayClient) updateLease(cred *cryptoops.Credential, lease *rdverb.Leas
368 // 응답 수신
369 respPacket, err := readPacket(stream)
370 if err != nil {
371 + log.Error().Uint32("stream_id", stream.StreamID()).Err(err).Msg("[RelayClient] Failed to read packet from stream")
372 return rdverb.ResponseCode_RESPONSE_CODE_UNKNOWN, err
373 }
374
375 if respPacket.Type != rdverb.PacketType_PACKET_TYPE_LEASE_UPDATE_RESPONSE {
376 + log.Error().Uint32("stream_id", stream.StreamID()).Msg("[RelayClient] Unexpected response packet type")
377 return rdverb.ResponseCode_RESPONSE_CODE_UNKNOWN, ErrInvalidResponse
378 }
379
380 var resp rdverb.LeaseUpdateResponse
381 err = resp.UnmarshalVT(respPacket.Payload)
382 if err != nil {
383 + log.Error().Uint32("stream_id", stream.StreamID()).Err(err).Msg("[RelayClient] Failed to unmarshal lease update response")
384 return rdverb.ResponseCode_RESPONSE_CODE_UNKNOWN, err
385 }
386
@@ -434,6 +437,7 @@ func (g *RelayClient) deleteLease(cred *cryptoops.Credential, identity *rdsec.Id
437 // 응답 수신
438 respPacket, err := readPacket(stream)
439 if err != nil {
440 + log.Error().Uint32("stream_id", stream.StreamID()).Err(err).Msg("[RelayClient] Failed to read packet from stream")
441 return rdverb.ResponseCode_RESPONSE_CODE_UNKNOWN, err
442 }
443
@@ -495,7 +499,7 @@ func (g *RelayClient) RequestConnection(leaseID string, alpn string, clientCred
499 log.Debug().Str("lease_id", leaseID).Msg("[RelayClient] Waiting for connection response")
500 respPacket, err := readPacket(stream)
501 if err != nil {
498 - log.Error().Err(err).Msg("[RelayClient] Failed to read connection response")
502 + log.Error().Str("lease_id", leaseID).Err(err).Msg("[RelayClient] Failed to read connection response")
503 stream.Close()
504 return rdverb.ResponseCode_RESPONSE_CODE_UNKNOWN, nil, err
505 }
@@ -509,7 +513,7 @@ func (g *RelayClient) RequestConnection(leaseID string, alpn string, clientCred
513 var resp rdverb.ConnectionResponse
514 err = resp.UnmarshalVT(respPacket.Payload)
515 if err != nil {
512 - log.Error().Err(err).Msg("[RelayClient] Failed to unmarshal connection response")
516 + log.Error().Str("lease_id", leaseID).Err(err).Msg("[RelayClient] Failed to unmarshal connection response")
517 stream.Close()
518 return rdverb.ResponseCode_RESPONSE_CODE_UNKNOWN, nil, err
519 }
relaydns/handlers.go
+13 -2
@@ -72,6 +72,12 @@ func (g *RelayServer) handleLeaseUpdateRequest(ctx *StreamContext, packet *rdver
72 g.leaseConnectionsLock.Lock()
73 g.leaseConnections[leaseID] = ctx.Connection
74 g.leaseConnectionsLock.Unlock()
75 +
76 + // Log lease update completion
77 + log.Debug().
78 + Str("lease_id", leaseID).
79 + Int64("connection_id", ctx.ConnectionID).
80 + Msg("[RelayServer] Lease update completed successfully")
81 } else {
82 resp.Code = rdverb.ResponseCode_RESPONSE_CODE_INVALID_EXPIRES
83 }
@@ -115,6 +121,11 @@ func (g *RelayServer) handleLeaseDeleteRequest(ctx *StreamContext, packet *rdver
121 g.leaseConnectionsLock.Lock()
122 delete(g.leaseConnections, leaseID)
123 g.leaseConnectionsLock.Unlock()
124 +
125 + // Log lease deletion completion
126 + log.Debug().
127 + Str("lease_id", leaseID).
128 + Msg("[RelayServer] Lease deletion completed successfully")
129 } else {
130 resp.Code = rdverb.ResponseCode_RESPONSE_CODE_INVALID_IDENTITY
131 }
@@ -254,7 +265,7 @@ func (g *RelayServer) handleConnectionRequest(ctx *StreamContext, packet *rdverb
265 log.Debug().Str("lease_id", req.LeaseId).Msg("[RelayServer] Waiting for response from lease holder")
266 respPacket, err := readPacket(leaseStream)
267 if err != nil {
257 - log.Error().Err(err).Msg("[RelayServer] Failed to read forward response")
268 + log.Error().Str("lease_id", req.LeaseId).Err(err).Msg("[RelayServer] Failed to read forward response")
269 leaseStream.Close()
270 resp.Code = rdverb.ResponseCode_RESPONSE_CODE_REJECTED
271
@@ -364,7 +375,7 @@ func (g *RelayServer) handleConnectionRequest(ctx *StreamContext, packet *rdverb
375 }()
376
377 wg.Wait()
367 - log.Debug().Str("lease_id", leaseID).Msg("[RelayServer] Bidirectional forwarding completed")
378 + log.Debug().Str("lease_id", leaseID).Msg("[RelayServer] Connection forwarding completed successfully")
379
380 // Clean up relayed connection tracking
381 g.relayedConnectionsLock.Lock()
relaydns/relay.go
+7 -5
@@ -163,11 +163,13 @@ func (g *RelayServer) handleStream(stream *yamux.Stream, id int64, connection *C
163 for {
164 packet, err := readPacket(stream)
165 if err != nil {
166 - log.Debug().
167 - Err(err).
168 - Int64("conn_id", id).
169 - Uint32("stream_id", stream.StreamID()).
170 - Msg("[RelayServer] Error reading packet")
166 + if err != io.EOF {
167 + log.Debug().
168 + Err(err).
169 + Int64("conn_id", id).
170 + Uint32("stream_id", stream.StreamID()).
171 + Msg("[RelayServer] Error reading packet")
172 + }
173 return
174 }
175