package main import ( "github.com/emicklei/go-restful" "io" "log" "net/http" "os" "strings" "time" ) // This example shows how to create a filter that produces log lines // according to the Common Log Format, also known as the NCSA standard. // // kindly contributed by leehambley // // GET http://localhost:8080/ping var logger *log.Logger = log.New(os.Stdout, "", 0) func NCSACommonLogFormatLogger() restful.FilterFunction { return func(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) { var username = "-" if req.Request.URL.User != nil { if name := req.Request.URL.User.Username(); name != "" { username = name } } chain.ProcessFilter(req, resp) logger.Printf("%s - %s [%s] \"%s %s %s\" %d %d", strings.Split(req.Request.RemoteAddr, ":")[0], username, time.Now().Format("02/Jan/2006:15:04:05 -0700"), req.Request.Method, req.Request.URL.RequestURI(), req.Request.Proto, resp.StatusCode(), resp.ContentLength(), ) } } func main() { ws := new(restful.WebService) ws.Filter(NCSACommonLogFormatLogger()) ws.Route(ws.GET("/ping").To(hello)) restful.Add(ws) log.Fatal(http.ListenAndServe(":8080", nil)) } func hello(req *restful.Request, resp *restful.Response) { io.WriteString(resp, "pong") }