Skip to content

Add an HTTP server access logger middleware

Andrew Newdigate requested to merge an-access-logger into master

WIP: Requires the following merge requests to be merged first


An standardised HTTP access log middleware for GitLab's go servers.

Much of the code is lifted from Workhorse's access logger, but it is intended to be fitted onto the pages service for better access logging on that service.

Here is an example of how to use it:

package main

import (
	"fmt"
	"net/http"

	"gitlab.com/gitlab-org/labkit/log"
)

func main() {
	handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "Hello world")
	})

	// This func is used by WithExtraFields to add additional fields to the logger
	extraFieldGenerator := func(r *http.Request) log.Fields {
		return log.Fields{"header": r.Header.Get("X-Magical-Header")}
	}

	http.ListenAndServe(":8080",
		log.AccessLogger(handler, // Add accesslogger middleware
		log.WithExtraFields(extraFieldGenerator),                          // Include custom fields into the logs
		log.WithFieldsExcluded(log.HTTPRequestReferrer|log.HTTPUserAgent), // Exclude user-agent and referrer fields from the logs
	    ),
	)
}
Edited by Andrew Newdigate

Merge request reports