How do you handle HTTP client server logging in Go?

In Go, there are several ways to handle logging in an HTTP client or server. One common way is to use the log package from the standard library. Here's an example of how to use the log package to log HTTP requests and responses in a client:
Client Server Logging

Example

package main

import (
	"log"
	"net/http"
	"net/http/httputil"
	"time"
)

func main() {
	client := &http.Client{
		Timeout: 10 * time.Second,
	}

	req, err := http.NewRequest("GET", "https://example.com", nil)
	if err != nil {
		log.Fatal(err)
	}

	// Use httputil.DumpRequestOut to log the outgoing request
	reqBytes, err := httputil.DumpRequestOut(req, true)
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("Request: %s", reqBytes)

	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}

	// Use httputil.DumpResponse to log the incoming response
	respBytes, err := httputil.DumpResponse(resp, true)
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("Response: %s", respBytes)

	defer resp.Body.Close()
}

This code sets up an HTTP client with a timeout of 10 seconds, creates a GET request to https://example.com, logs the outgoing request using httputil.DumpRequestOut, sends the request using the client, logs the incoming response using httputil.DumpResponse, and finally closes the response body.

You can customize the logging output to suit your needs, for example by using different log levels or formats, or by logging additional information such as timestamps or request/response headers.


Most Helpful This Week