diff --git a/cns/logger/cnslogger.go b/cns/logger/cnslogger.go index 5289259903..86cffb3112 100644 --- a/cns/logger/cnslogger.go +++ b/cns/logger/cnslogger.go @@ -148,21 +148,28 @@ func (c *logger) Request(tag string, request any, err error) { c.sendTraceInternal(msg, lvl) } -func (c *logger) Response(tag string, response any, returnCode types.ResponseCode, err error) { - c.logger.Response(tag, response, int(returnCode), returnCode.String(), err) +func (c *logger) Response(tag string, response any, returnCode types.ResponseCode, properties any, err error) { + c.logger.Response(tag, response, int(returnCode), returnCode.String(), properties, err) if c.th == nil || c.disableTraceLogging { return } var msg string lvl := ai.InfoLevel + + // Create a string for properties if they exist + props := "" + if properties != nil { + props = fmt.Sprintf(" Properties: %+v", properties) + } + switch { case err == nil && returnCode == 0: - msg = fmt.Sprintf("[%s] Sent %T %+v.", tag, response, response) + msg = fmt.Sprintf("[%s] Sent %T %+v.%s", tag, response, response, props) case err != nil: - msg = fmt.Sprintf("[%s] Code:%s, %+v %s.", tag, returnCode.String(), response, err.Error()) + msg = fmt.Sprintf("[%s] Code:%s, %+v %s.%s", tag, returnCode.String(), response, err.Error(), props) lvl = ai.ErrorLevel default: - msg = fmt.Sprintf("[%s] Code:%s, %+v.", tag, returnCode.String(), response) + msg = fmt.Sprintf("[%s] Code:%s, %+v.%s", tag, returnCode.String(), response, props) } c.sendTraceInternal(msg, lvl) } diff --git a/cns/logger/log.go b/cns/logger/log.go index 2a0d903a03..72fcdb446f 100644 --- a/cns/logger/log.go +++ b/cns/logger/log.go @@ -18,7 +18,7 @@ type loggershim interface { LogEvent(aitelemetry.Event) Errorf(string, ...any) Request(string, any, error) - Response(string, any, types.ResponseCode, error) + Response(string, any, types.ResponseCode, any, error) ResponseEx(string, any, any, types.ResponseCode, error) SendMetric(aitelemetry.Metric) } @@ -85,8 +85,8 @@ func Request(tag string, request any, err error) { } // Deprecated: The global logger is deprecated. Migrate to zap using the cns/logger/v2 package and pass the logger instead. -func Response(tag string, response any, returnCode types.ResponseCode, err error) { - Log.Response(tag, response, returnCode, err) +func Response(tag string, response any, returnCode types.ResponseCode, properties any, err error) { + Log.Response(tag, response, returnCode, properties, err) } // Deprecated: The global logger is deprecated. Migrate to zap using the cns/logger/v2 package and pass the logger instead. diff --git a/cns/logger/v2/shim.go b/cns/logger/v2/shim.go index b427cef8f4..ad8bd2dc4e 100644 --- a/cns/logger/v2/shim.go +++ b/cns/logger/v2/shim.go @@ -39,8 +39,8 @@ func (s *shim) Request(msg string, data any, err error) { s.z.Sugar().Infow("Request", "message", msg, "data", data, "error", err) } -func (s *shim) Response(msg string, data any, code types.ResponseCode, err error) { - s.z.Sugar().Infow("Response", "message", msg, "data", data, "code", code, "error", err) +func (s *shim) Response(msg string, data any, code types.ResponseCode, properties any, err error) { + s.z.Sugar().Infow("Response", "message", msg, "data", data, "code", code, "properties", properties, "error", err) } func (s *shim) ResponseEx(msg string, request, response any, code types.ResponseCode, err error) { diff --git a/cns/restserver/api.go b/cns/restserver/api.go index 4f46c0f65f..10f8b69d49 100644 --- a/cns/restserver/api.go +++ b/cns/restserver/api.go @@ -68,7 +68,7 @@ func (service *HTTPRestService) setEnvironment(w http.ResponseWriter, r *http.Re resp := &cns.Response{ReturnCode: 0} err = common.Encode(w, &resp) - logger.Response(service.Name, resp, resp.ReturnCode, err) + logger.Response(service.Name, resp, resp.ReturnCode, nil, err) } // Handles CreateNetwork requests. @@ -174,7 +174,7 @@ func (service *HTTPRestService) createNetwork(w http.ResponseWriter, r *http.Req service.saveState() } - logger.Response(service.Name, resp, resp.ReturnCode, err) + logger.Response(service.Name, resp, resp.ReturnCode, nil, err) } // Handles DeleteNetwork requests. @@ -230,7 +230,7 @@ func (service *HTTPRestService) deleteNetwork(w http.ResponseWriter, r *http.Req service.saveState() } - logger.Response(service.Name, resp, resp.ReturnCode, err) + logger.Response(service.Name, resp, resp.ReturnCode, nil, err) } // Handles CreateHnsNetwork requests. @@ -281,7 +281,7 @@ func (service *HTTPRestService) createHnsNetwork(w http.ResponseWriter, r *http. service.saveState() } - logger.Response(service.Name, resp, resp.ReturnCode, err) + logger.Response(service.Name, resp, resp.ReturnCode, nil, err) } // Handles deleteHnsNetwork requests. @@ -333,7 +333,7 @@ func (service *HTTPRestService) deleteHnsNetwork(w http.ResponseWriter, r *http. service.saveState() } - logger.Response(service.Name, resp, resp.ReturnCode, err) + logger.Response(service.Name, resp, resp.ReturnCode, nil, err) } // Retrieves the host local ip address. Containers can talk to host using this IP address. @@ -385,7 +385,7 @@ func (service *HTTPRestService) getHostLocalIP(w http.ResponseWriter, r *http.Re err := common.Encode(w, &hostLocalIPResponse) - logger.Response(service.Name, hostLocalIPResponse, resp.ReturnCode, err) + logger.Response(service.Name, hostLocalIPResponse, resp.ReturnCode, nil, err) } // Handles retrieval of ip addresses that are available to be reserved from ipam driver. @@ -397,7 +397,7 @@ func (service *HTTPRestService) getAvailableIPAddresses(w http.ResponseWriter, r ipResp := &cns.GetIPAddressesResponse{Response: resp} err := common.Encode(w, &ipResp) - logger.Response(service.Name, ipResp, resp.ReturnCode, err) + logger.Response(service.Name, ipResp, resp.ReturnCode, nil, err) } // Handles retrieval of reserved ip addresses from ipam driver. @@ -409,7 +409,7 @@ func (service *HTTPRestService) getReservedIPAddresses(w http.ResponseWriter, r ipResp := &cns.GetIPAddressesResponse{Response: resp} err := common.Encode(w, &ipResp) - logger.Response(service.Name, ipResp, resp.ReturnCode, err) + logger.Response(service.Name, ipResp, resp.ReturnCode, nil, err) } // getAllIPAddresses retrieves all ip addresses from ipam driver. @@ -421,7 +421,7 @@ func (service *HTTPRestService) getAllIPAddresses(w http.ResponseWriter, r *http ipResp := &cns.GetIPAddressesResponse{Response: resp} err := common.Encode(w, &ipResp) - logger.Response(service.Name, ipResp, resp.ReturnCode, err) + logger.Response(service.Name, ipResp, resp.ReturnCode, nil, err) } // Handles health report requests. @@ -432,7 +432,7 @@ func (service *HTTPRestService) getHealthReport(w http.ResponseWriter, r *http.R resp := &cns.Response{ReturnCode: 0} err := common.Encode(w, &resp) - logger.Response(service.Name, resp, resp.ReturnCode, err) + logger.Response(service.Name, resp, resp.ReturnCode, nil, err) } func (service *HTTPRestService) setOrchestratorType(w http.ResponseWriter, r *http.Request) { @@ -479,7 +479,7 @@ func (service *HTTPRestService) setOrchestratorType(w http.ResponseWriter, r *ht } err = common.Encode(w, &resp) - logger.Response(service.Name, resp, resp.ReturnCode, err) + logger.Response(service.Name, resp, resp.ReturnCode, nil, err) } // getHomeAz retrieves home AZ of host @@ -569,7 +569,7 @@ func (service *HTTPRestService) createOrUpdateNetworkContainer(w http.ResponseWr logNCSnapshot(req) } - logger.Response(service.Name, reserveResp, resp.ReturnCode, err) + logger.Response(service.Name, reserveResp, resp.ReturnCode, nil, err) } func (service *HTTPRestService) getNetworkContainerByID(w http.ResponseWriter, r *http.Request) { @@ -592,7 +592,7 @@ func (service *HTTPRestService) getNetworkContainerByID(w http.ResponseWriter, r reserveResp := &cns.GetNetworkContainerResponse{Response: resp} err = common.Encode(w, &reserveResp) - logger.Response(service.Name, reserveResp, resp.ReturnCode, err) + logger.Response(service.Name, reserveResp, resp.ReturnCode, nil, err) } // the function is to get all network containers based on given OrchestratorContext @@ -635,7 +635,7 @@ func (service *HTTPRestService) GetAllNetworkContainers(w http.ResponseWriter, r } err = common.Encode(w, &resp) - logger.Response(service.Name, resp, resp.Response.ReturnCode, err) + logger.Response(service.Name, resp, resp.Response.ReturnCode, nil, err) } func (service *HTTPRestService) GetNetworkContainerByOrchestratorContext(w http.ResponseWriter, r *http.Request) { @@ -651,7 +651,7 @@ func (service *HTTPRestService) GetNetworkContainerByOrchestratorContext(w http. getNetworkContainerResponses := service.getAllNetworkContainerResponses(req) // nolint err = common.Encode(w, &getNetworkContainerResponses[0]) - logger.Response(service.Name, getNetworkContainerResponses[0], getNetworkContainerResponses[0].Response.ReturnCode, err) + logger.Response(service.Name, getNetworkContainerResponses[0], getNetworkContainerResponses[0].Response.ReturnCode, nil, err) } // getOrRefreshNetworkContainers is to check whether refresh association is needed. The state file in CNS will get updated if it is lost. @@ -670,7 +670,7 @@ func (service *HTTPRestService) getOrRefreshNetworkContainers(w http.ResponseWri default: w.WriteHeader(http.StatusMethodNotAllowed) err := errors.New("[Azure CNS] getOrRefreshNetworkContainers did not receive a GET or POST") - logger.Response(service.Name, nil, types.InvalidParameter, err) + logger.Response(service.Name, nil, types.InvalidParameter, nil, err) return } } @@ -747,7 +747,7 @@ func (service *HTTPRestService) deleteNetworkContainer(w http.ResponseWriter, r reserveResp := &cns.DeleteNetworkContainerResponse{Response: resp} err = common.Encode(w, &reserveResp) - logger.Response(service.Name, reserveResp, resp.ReturnCode, err) + logger.Response(service.Name, reserveResp, resp.ReturnCode, nil, err) } func (service *HTTPRestService) getInterfaceForContainer(w http.ResponseWriter, r *http.Request) { @@ -801,7 +801,7 @@ func (service *HTTPRestService) getInterfaceForContainer(w http.ResponseWriter, err = common.Encode(w, &getInterfaceForContainerResponse) - logger.Response(service.Name, getInterfaceForContainerResponse, resp.ReturnCode, err) + logger.Response(service.Name, getInterfaceForContainerResponse, resp.ReturnCode, nil, err) } func (service *HTTPRestService) attachNetworkContainerToNetwork(w http.ResponseWriter, r *http.Request) { @@ -817,7 +817,7 @@ func (service *HTTPRestService) attachNetworkContainerToNetwork(w http.ResponseW resp := service.attachOrDetachHelper(req, attach, r.Method) attachResp := &cns.AttachContainerToNetworkResponse{Response: resp} err = common.Encode(w, &attachResp) - logger.Response(service.Name, attachResp, resp.ReturnCode, err) + logger.Response(service.Name, attachResp, resp.ReturnCode, nil, err) } func (service *HTTPRestService) detachNetworkContainerFromNetwork(w http.ResponseWriter, r *http.Request) { @@ -833,7 +833,7 @@ func (service *HTTPRestService) detachNetworkContainerFromNetwork(w http.Respons resp := service.attachOrDetachHelper(req, detach, r.Method) detachResp := &cns.DetachContainerFromNetworkResponse{Response: resp} err = common.Encode(w, &detachResp) - logger.Response(service.Name, detachResp, resp.ReturnCode, err) + logger.Response(service.Name, detachResp, resp.ReturnCode, nil, err) } // Retrieves the number of logic processors on a node. It will be primarily @@ -864,7 +864,7 @@ func (service *HTTPRestService) getNumberOfCPUCores(w http.ResponseWriter, r *ht err := common.Encode(w, &numOfCPUCoresResp) - logger.Response(service.Name, numOfCPUCoresResp, resp.ReturnCode, err) + logger.Response(service.Name, numOfCPUCoresResp, resp.ReturnCode, nil, err) } func extractNCParamsFromURL(networkContainerURL string) (cns.NetworkContainerParameters, error) { @@ -929,12 +929,16 @@ func (service *HTTPRestService) publishNetworkContainer(w http.ResponseWriter, r }, } respondJSON(w, http.StatusBadRequest, resp) - logger.Response(service.Name, resp, resp.Response.ReturnCode, err) + logger.Response(service.Name, resp, resp.Response.ReturnCode, nil, err) return } ctx := r.Context() + logProperties := map[string]interface{}{ + "Network ID": req.NetworkID, + "NC ID": req.NetworkContainerID, + } joinResp, err := service.wsproxy.JoinNetwork(ctx, req.NetworkID) //nolint:govet // ok to shadow if err != nil { resp := cns.PublishNetworkContainerResponse{ @@ -945,7 +949,7 @@ func (service *HTTPRestService) publishNetworkContainer(w http.ResponseWriter, r PublishErrorStr: err.Error(), } respondJSON(w, http.StatusOK, resp) // legacy behavior - logger.Response(service.Name, resp, resp.Response.ReturnCode, err) + logger.Response(service.Name, resp, resp.Response.ReturnCode, logProperties, err) return } @@ -962,7 +966,7 @@ func (service *HTTPRestService) publishNetworkContainer(w http.ResponseWriter, r PublishResponseBody: joinBytes, } respondJSON(w, http.StatusOK, resp) // legacy behavior - logger.Response(service.Name, resp, resp.Response.ReturnCode, nil) + logger.Response(service.Name, resp, resp.Response.ReturnCode, logProperties, nil) return } @@ -979,7 +983,7 @@ func (service *HTTPRestService) publishNetworkContainer(w http.ResponseWriter, r PublishErrorStr: err.Error(), } respondJSON(w, http.StatusOK, resp) // legacy behavior - logger.Response(service.Name, resp, resp.Response.ReturnCode, err) + logger.Response(service.Name, resp, resp.Response.ReturnCode, logProperties, err) return } @@ -999,7 +1003,7 @@ func (service *HTTPRestService) publishNetworkContainer(w http.ResponseWriter, r } respondJSON(w, http.StatusOK, resp) - logger.Response(service.Name, resp, resp.Response.ReturnCode, nil) + logger.Response(service.Name, resp, resp.Response.ReturnCode, logProperties, nil) } func (service *HTTPRestService) unpublishNetworkContainer(w http.ResponseWriter, r *http.Request) { @@ -1016,6 +1020,11 @@ func (service *HTTPRestService) unpublishNetworkContainer(w http.ResponseWriter, logger.Request(service.Name, req, nil) + logProperties := map[string]interface{}{ + "Network ID": req.NetworkID, + "NC ID": req.NetworkContainerID, + } + ncParams, err := extractNCParamsFromURL(req.DeleteNetworkContainerURL) if err != nil { resp := cns.UnpublishNetworkContainerResponse{ @@ -1025,7 +1034,7 @@ func (service *HTTPRestService) unpublishNetworkContainer(w http.ResponseWriter, }, } respondJSON(w, http.StatusBadRequest, resp) - logger.Response(service.Name, resp, resp.Response.ReturnCode, err) + logger.Response(service.Name, resp, resp.Response.ReturnCode, logProperties, err) return } @@ -1063,7 +1072,7 @@ func (service *HTTPRestService) unpublishNetworkContainer(w http.ResponseWriter, UnpublishErrorStr: err.Error(), } respondJSON(w, http.StatusOK, resp) // legacy behavior - logger.Response(service.Name, resp, resp.Response.ReturnCode, err) + logger.Response(service.Name, resp, resp.Response.ReturnCode, logProperties, err) return } @@ -1080,7 +1089,7 @@ func (service *HTTPRestService) unpublishNetworkContainer(w http.ResponseWriter, UnpublishResponseBody: joinBytes, } respondJSON(w, http.StatusOK, resp) // legacy behavior - logger.Response(service.Name, resp, resp.Response.ReturnCode, nil) + logger.Response(service.Name, resp, resp.Response.ReturnCode, logProperties, nil) return } @@ -1098,7 +1107,7 @@ func (service *HTTPRestService) unpublishNetworkContainer(w http.ResponseWriter, UnpublishErrorStr: err.Error(), } respondJSON(w, http.StatusOK, resp) // legacy behavior - logger.Response(service.Name, resp, resp.Response.ReturnCode, err) + logger.Response(service.Name, resp, resp.Response.ReturnCode, logProperties, err) return } @@ -1118,7 +1127,7 @@ func (service *HTTPRestService) unpublishNetworkContainer(w http.ResponseWriter, } respondJSON(w, http.StatusOK, resp) - logger.Response(service.Name, resp, resp.Response.ReturnCode, nil) + logger.Response(service.Name, resp, resp.Response.ReturnCode, logProperties, nil) } func (service *HTTPRestService) CreateHostNCApipaEndpoint(w http.ResponseWriter, r *http.Request) { @@ -1177,7 +1186,7 @@ func (service *HTTPRestService) CreateHostNCApipaEndpoint(w http.ResponseWriter, } err = common.Encode(w, &response) - logger.Response(service.Name, response, response.Response.ReturnCode, err) + logger.Response(service.Name, response, response.Response.ReturnCode, nil, err) } func (service *HTTPRestService) DeleteHostNCApipaEndpoint(w http.ResponseWriter, r *http.Request) { @@ -1216,7 +1225,7 @@ func (service *HTTPRestService) DeleteHostNCApipaEndpoint(w http.ResponseWriter, } err = common.Encode(w, &response) - logger.Response(service.Name, response, response.Response.ReturnCode, err) + logger.Response(service.Name, response, response.Response.ReturnCode, nil, err) } // This function is used to query NMagents's supported APIs list @@ -1259,7 +1268,7 @@ func (service *HTTPRestService) nmAgentSupportedApisHandler(w http.ResponseWrite serviceErr := common.Encode(w, &nmAgentSupportedApisResponse) - logger.Response(service.Name, nmAgentSupportedApisResponse, resp.ReturnCode, serviceErr) + logger.Response(service.Name, nmAgentSupportedApisResponse, resp.ReturnCode, nil, serviceErr) } // getVMUniqueID retrieves VMUniqueID from the IMDS @@ -1278,7 +1287,7 @@ func (service *HTTPRestService) getVMUniqueID(w http.ResponseWriter, r *http.Req }, } respondJSON(w, http.StatusInternalServerError, resp) - logger.Response(service.Name, resp, resp.Response.ReturnCode, err) + logger.Response(service.Name, resp, resp.Response.ReturnCode, nil, err) return } @@ -1289,7 +1298,7 @@ func (service *HTTPRestService) getVMUniqueID(w http.ResponseWriter, r *http.Req VMUniqueID: vmUniqueID, } respondJSON(w, http.StatusOK, resp) - logger.Response(service.Name, resp, resp.Response.ReturnCode, err) + logger.Response(service.Name, resp, resp.Response.ReturnCode, nil, err) default: returnMessage := fmt.Sprintf("[Azure CNS] Error. getVMUniqueID did not receive a GET."+ @@ -1335,5 +1344,5 @@ func (service *HTTPRestService) nmAgentNCListHandler(w http.ResponseWriter, r *h } serviceErr := common.Encode(w, &NCListResponse) - logger.Response(service.Name, NCListResponse, resp.ReturnCode, serviceErr) + logger.Response(service.Name, NCListResponse, resp.ReturnCode, nil, serviceErr) } diff --git a/cns/restserver/ipam.go b/cns/restserver/ipam.go index 7c1366149d..8b1d286574 100644 --- a/cns/restserver/ipam.go +++ b/cns/restserver/ipam.go @@ -688,7 +688,7 @@ func (service *HTTPRestService) HandleDebugPodContext(w http.ResponseWriter, r * PodContext: service.PodIPIDByPodInterfaceKey, } err := common.Encode(w, &resp) - logger.Response(opName, resp, resp.Response.ReturnCode, err) + logger.Response(opName, resp, resp.Response.ReturnCode, nil, err) } func (service *HTTPRestService) HandleDebugRestData(w http.ResponseWriter, r *http.Request) { //nolint @@ -702,7 +702,7 @@ func (service *HTTPRestService) HandleDebugRestData(w http.ResponseWriter, r *ht }, } err := common.Encode(w, &resp) - logger.Response(opName, resp, resp.Response.ReturnCode, err) + logger.Response(opName, resp, resp.Response.ReturnCode, nil, err) } func (service *HTTPRestService) HandleDebugIPAddresses(w http.ResponseWriter, r *http.Request) { @@ -1143,7 +1143,7 @@ func (service *HTTPRestService) EndpointHandlerAPI(w http.ResponseWriter, r *htt Message: fmt.Sprintf("[EndpointHandlerAPI] EndpointHandlerAPI failed with error: %s", ErrOptManageEndpointState), } err := common.Encode(w, &response) - logger.Response(opName, response, response.ReturnCode, err) + logger.Response(opName, response, response.ReturnCode, nil, err) return } switch r.Method { @@ -1180,7 +1180,7 @@ func (service *HTTPRestService) GetEndpointHandler(w http.ResponseWriter, r *htt } w.Header().Set(cnsReturnCode, response.Response.ReturnCode.String()) err = common.Encode(w, &response) - logger.Response(opName, response, response.Response.ReturnCode, err) + logger.Response(opName, response, response.Response.ReturnCode, nil, err) return } response := GetEndpointResponse{ @@ -1192,7 +1192,7 @@ func (service *HTTPRestService) GetEndpointHandler(w http.ResponseWriter, r *htt } w.Header().Set(cnsReturnCode, response.Response.ReturnCode.String()) err = common.Encode(w, &response) - logger.Response(opName, response, response.Response.ReturnCode, err) + logger.Response(opName, response, response.Response.ReturnCode, nil, err) } // GetEndpointHelper returns the state of the given endpointId @@ -1248,7 +1248,7 @@ func (service *HTTPRestService) UpdateEndpointHandler(w http.ResponseWriter, r * } w.Header().Set(cnsReturnCode, response.ReturnCode.String()) err = common.Encode(w, &response) - logger.Response(opName, response, response.ReturnCode, err) + logger.Response(opName, response, response.ReturnCode, nil, err) return } if err = verifyUpdateEndpointStateRequest(req); err != nil { @@ -1258,7 +1258,7 @@ func (service *HTTPRestService) UpdateEndpointHandler(w http.ResponseWriter, r * } w.Header().Set(cnsReturnCode, response.ReturnCode.String()) err = common.Encode(w, &response) - logger.Response(opName, response, response.ReturnCode, err) + logger.Response(opName, response, response.ReturnCode, nil, err) return } // Update the endpoint state @@ -1270,7 +1270,7 @@ func (service *HTTPRestService) UpdateEndpointHandler(w http.ResponseWriter, r * } w.Header().Set(cnsReturnCode, response.ReturnCode.String()) err = common.Encode(w, &response) - logger.Response(opName, response, response.ReturnCode, err) + logger.Response(opName, response, response.ReturnCode, nil, err) return } response := cns.Response{ @@ -1279,7 +1279,7 @@ func (service *HTTPRestService) UpdateEndpointHandler(w http.ResponseWriter, r * } w.Header().Set(cnsReturnCode, response.ReturnCode.String()) err = common.Encode(w, &response) - logger.Response(opName, response, response.ReturnCode, err) + logger.Response(opName, response, response.ReturnCode, nil, err) } // UpdateEndpointHelper updates the state of the given endpointId with HNSId, VethName or other InterfaceInfo fields diff --git a/cns/restserver/util.go b/cns/restserver/util.go index a84eb8cef0..b9a3700450 100644 --- a/cns/restserver/util.go +++ b/cns/restserver/util.go @@ -947,7 +947,7 @@ func (service *HTTPRestService) handleGetNetworkContainers(w http.ResponseWriter }, } err := acn.Encode(w, &response) - logger.Response(service.Name, response, response.Response.ReturnCode, err) + logger.Response(service.Name, response, response.Response.ReturnCode, nil, err) } // handlePostNetworkContainers stores all the NCs (from the request that client sent) into CNS's state file @@ -964,7 +964,7 @@ func (service *HTTPRestService) handlePostNetworkContainers(w http.ResponseWrite }, } err = acn.Encode(w, &response) - logger.Response(service.Name, response, response.Response.ReturnCode, err) + logger.Response(service.Name, response, response.Response.ReturnCode, nil, err) return } if err := req.Validate(); err != nil { //nolint:govet // shadow okay @@ -978,7 +978,7 @@ func (service *HTTPRestService) handlePostNetworkContainers(w http.ResponseWrite Response: createNCsResp, } err = acn.Encode(w, &response) - logger.Response(service.Name, response, response.Response.ReturnCode, err) + logger.Response(service.Name, response, response.Response.ReturnCode, nil, err) } func (service *HTTPRestService) createNetworkContainers(createNetworkContainerRequests []cns.CreateNetworkContainerRequest) cns.Response { @@ -1016,7 +1016,7 @@ func (service *HTTPRestService) createNetworkContainers(createNetworkContainerRe // setResponse encodes the http response func (service *HTTPRestService) setResponse(w http.ResponseWriter, returnCode types.ResponseCode, response interface{}) { serviceErr := acn.Encode(w, &response) - logger.Response(service.Name, response, returnCode, serviceErr) + logger.Response(service.Name, response, returnCode, nil, serviceErr) } // ncList contains comma-separated list of unique NCs diff --git a/log/logger.go b/log/logger.go index 17d577bacc..290691cccd 100644 --- a/log/logger.go +++ b/log/logger.go @@ -209,13 +209,19 @@ func (logger *Logger) Request(tag string, request interface{}, err error) { } // Response logs a structured response. -func (logger *Logger) Response(tag string, response interface{}, returnCode int, returnStr string, err error) { +func (logger *Logger) Response(tag string, response interface{}, returnCode int, returnStr string, properties any, err error) { + // Create a string for properties if they exist + props := "" + if properties != nil { + props = fmt.Sprintf(" Properties: %+v", properties) + } + if err == nil && returnCode == 0 { - logger.Printf("[%s] Sent %T %+v.", tag, response, response) + logger.Printf("[%s] Sent %T %+v.%s", tag, response, response, props) } else if err != nil { - logger.Errorf("[%s] Code:%s, %+v %s.", tag, returnStr, response, err.Error()) + logger.Errorf("[%s] Code:%s, %+v %s.%s", tag, returnStr, response, err.Error(), props) } else { - logger.Errorf("[%s] Code:%s, %+v.", tag, returnStr, response) + logger.Errorf("[%s] Code:%s, %+v.%s", tag, returnStr, response, props) } } diff --git a/log/stdapi.go b/log/stdapi.go index 9b91afecde..dd32696516 100644 --- a/log/stdapi.go +++ b/log/stdapi.go @@ -41,7 +41,7 @@ func Request(tag string, request interface{}, err error) { } func Response(tag string, response interface{}, returnCode int, returnStr string, err error) { - stdLog.Response(tag, response, returnCode, returnStr, err) + stdLog.Response(tag, response, returnCode, returnStr, nil, err) } // Logf logs to the local log.