Как настроить журнал доступа/ошибок для http.ListenAndServe

Я использую следующее для простого сервера. Мне интересно, как настроить журнал доступа для всех запросов, регистрирующих метку времени, метод, URL-адрес запроса и код ответа http.

http.HandleFunc("/foo", funcFoo)
err := http.ListenAndServe("127.0.0.1:2074", nil)

Ответ 1

Взгляните сюда: http://github.com/gorilla/handlers

http.Handle("/foo", funcFoo)
err := http.ListenAndServe("127.0.0.1:2074", handlers.LoggingHandler(os.Stdout, http.DefaultServeMux))

Это будет регистрировать любые входящие соединения по всему серверу. os.Stdout можно заменить любым, что предоставляет io.Writer (то есть файл, поток HTTP и т.д.). Если вы хотите, чтобы это было на маршруте, вы можете сделать:

http.Handle("/foo", handlers.LoggingHandler(os.Stdout, funcFoo))

Он также будет работать с gorilla/mux и другими маршрутизаторами/фреймворками, совместимыми с http.Handler.