diff --git a/connection/quic_datagram_v2.go b/connection/quic_datagram_v2.go index 1cedaa41..8ffcea60 100644 --- a/connection/quic_datagram_v2.go +++ b/connection/quic_datagram_v2.go @@ -124,7 +124,7 @@ func (q *datagramV2Connection) RegisterUdpSession(ctx context.Context, sessionID session, err := q.sessionManager.RegisterSession(ctx, sessionID, originProxy) if err != nil { originProxy.Close() - log.Err(err).Str("sessionID", sessionID.String()).Msgf("Failed to register udp session") + log.Err(err).Str(datagramsession.LogFieldSessionID, datagramsession.FormatSessionID(sessionID)).Msgf("Failed to register udp session") tracing.EndWithErrorStatus(registerSpan, err) return nil, err } @@ -132,7 +132,7 @@ func (q *datagramV2Connection) RegisterUdpSession(ctx context.Context, sessionID go q.serveUDPSession(session, closeAfterIdleHint) log.Debug(). - Str("sessionID", sessionID.String()). + Str(datagramsession.LogFieldSessionID, datagramsession.FormatSessionID(sessionID)). Str("src", originProxy.LocalAddr().String()). Str("dst", fmt.Sprintf("%s:%d", dstIP, dstPort)). Msgf("Registered session") @@ -163,7 +163,7 @@ func (q *datagramV2Connection) serveUDPSession(session *datagramsession.Session, } q.logger.Debug().Err(err). Int(management.EventTypeKey, int(management.UDP)). - Str("sessionID", session.ID.String()). + Str(datagramsession.LogFieldSessionID, datagramsession.FormatSessionID(session.ID)). Msg("Session terminated") } @@ -176,7 +176,7 @@ func (q *datagramV2Connection) closeUDPSession(ctx context.Context, sessionID uu // with edge q.logger.Debug().Err(err). Int(management.EventTypeKey, int(management.UDP)). - Str("sessionID", sessionID.String()). + Str(datagramsession.LogFieldSessionID, datagramsession.FormatSessionID(sessionID)). Msgf("Failed to open quic stream to unregister udp session with edge") return } @@ -187,14 +187,14 @@ func (q *datagramV2Connection) closeUDPSession(ctx context.Context, sessionID uu if err != nil { // Log this at debug because this is not an error if session was closed due to lost connection // with edge - q.logger.Err(err).Str("sessionID", sessionID.String()). + q.logger.Err(err).Str(datagramsession.LogFieldSessionID, datagramsession.FormatSessionID(sessionID)). Msgf("Failed to open rpc stream to unregister udp session with edge") return } defer rpcClientStream.Close() if err := rpcClientStream.UnregisterUdpSession(ctx, sessionID, message); err != nil { - q.logger.Err(err).Str("sessionID", sessionID.String()). + q.logger.Err(err).Str(datagramsession.LogFieldSessionID, datagramsession.FormatSessionID(sessionID)). Msgf("Failed to unregister udp session with edge") } } diff --git a/datagramsession/manager.go b/datagramsession/manager.go index ae332bf6..f315a0d3 100644 --- a/datagramsession/manager.go +++ b/datagramsession/manager.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "io" + "strings" "time" "github.com/google/uuid" @@ -20,8 +21,15 @@ const ( var ( errSessionManagerClosed = fmt.Errorf("session manager closed") + LogFieldSessionID = "sessionID" ) +func FormatSessionID(sessionID uuid.UUID) string { + sessionIDStr := sessionID.String() + sessionIDStr = strings.ReplaceAll(sessionIDStr, "-", "") + return sessionIDStr +} + // Manager defines the APIs to manage sessions from the same transport. type Manager interface { // Serve starts the event loop @@ -127,7 +135,7 @@ func (m *manager) registerSession(ctx context.Context, registration *registerSes func (m *manager) newSession(id uuid.UUID, dstConn io.ReadWriteCloser) *Session { logger := m.log.With(). Int(management.EventTypeKey, int(management.UDP)). - Str("sessionID", id.String()).Logger() + Str(LogFieldSessionID, FormatSessionID(id)).Logger() return &Session{ ID: id, sendFunc: m.sendFunc, @@ -174,7 +182,7 @@ func (m *manager) unregisterSession(unregistration *unregisterSessionEvent) { func (m *manager) sendToSession(datagram *packet.Session) { session, ok := m.sessions[datagram.ID] if !ok { - m.log.Error().Str("sessionID", datagram.ID.String()).Msg("session not found") + m.log.Error().Str(LogFieldSessionID, FormatSessionID(datagram.ID)).Msg("session not found") return } // session writes to destination over a connected UDP socket, which should not be blocking, so this call doesn't diff --git a/proxy/logger.go b/proxy/logger.go index 1bde18e1..fa202964 100644 --- a/proxy/logger.go +++ b/proxy/logger.go @@ -16,11 +16,14 @@ const ( logFieldLBProbe = "lbProbe" logFieldRule = "ingressRule" logFieldOriginService = "originService" - logFieldFlowID = "flowID" logFieldConnIndex = "connIndex" logFieldDestAddr = "destAddr" ) +var ( + LogFieldFlowID = "flowID" +) + // newHTTPLogger creates a child zerolog.Logger from the provided with added context from the HTTP request, ingress // services, and connection index. func newHTTPLogger(logger *zerolog.Logger, connIndex uint8, req *http.Request, rule int, serviceName string) zerolog.Logger { @@ -47,7 +50,7 @@ func newTCPLogger(logger *zerolog.Logger, req *connection.TCPRequest) zerolog.Lo Int(management.EventTypeKey, int(management.TCP)). Uint8(logFieldConnIndex, req.ConnIndex). Str(logFieldOriginService, ingress.ServiceWarpRouting). - Str(logFieldFlowID, req.FlowID). + Str(LogFieldFlowID, req.FlowID). Str(logFieldDestAddr, req.Dest). Uint8(logFieldConnIndex, req.ConnIndex). Logger()