DoH: add http/1.1 support
parent
0c196e8267
commit
db0d021927
@ -0,0 +1,55 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/fangdingjun/go-log"
|
||||||
|
)
|
||||||
|
|
||||||
|
type logHandler struct {
|
||||||
|
status int
|
||||||
|
w http.ResponseWriter
|
||||||
|
size int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (lh *logHandler) WriteHeader(status int) {
|
||||||
|
lh.status = status
|
||||||
|
lh.w.WriteHeader(status)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (lh *logHandler) Write(buf []byte) (int, error) {
|
||||||
|
lh.size += len(buf)
|
||||||
|
return lh.w.Write(buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (lh *logHandler) Header() http.Header {
|
||||||
|
return lh.w.Header()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (lh *logHandler) Status() int {
|
||||||
|
if lh.status != 0 {
|
||||||
|
return lh.status
|
||||||
|
}
|
||||||
|
return 200
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ http.ResponseWriter = &logHandler{}
|
||||||
|
|
||||||
|
func LogHandler(handler http.Handler) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
defer func() {
|
||||||
|
if err := recover(); err != nil {
|
||||||
|
log.Error(err)
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
log.Infof("\"%s %s %s\" - %d %d \"%s\"",
|
||||||
|
r.Method, r.RequestURI, r.Proto, 500, 0, r.UserAgent())
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
lh := &logHandler{w: w}
|
||||||
|
handler.ServeHTTP(lh, r)
|
||||||
|
log.Infof("\"%s %s %s\" - %d %d \"%s\"",
|
||||||
|
r.Method, r.RequestURI, r.Proto, lh.Status(), lh.size, r.UserAgent())
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue