35 lines
676 B
Go
35 lines
676 B
Go
package middleware
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"strings"
|
|
"time"
|
|
|
|
"gitrepo.ru/neonxp/gmifs/gemini"
|
|
)
|
|
|
|
func Logger(log *log.Logger, prefix string) func(gemini.Handler) gemini.Handler {
|
|
return func(next gemini.Handler) gemini.Handler {
|
|
fn := func(w gemini.ResponseWriter, r *gemini.Request) {
|
|
t := time.Now()
|
|
|
|
ri := gemini.NewInterceptor(w)
|
|
next.ServeGemini(ri, r)
|
|
ri.Flush()
|
|
|
|
ip := strings.Split(r.RemoteAddr, ":")[0]
|
|
fmt.Fprintf(log.Writer(), "%s%s - - [%s] \"%s\" %d %d - %v\n",
|
|
prefix,
|
|
ip,
|
|
t.Format("02/Jan/2006:15:04:05 -0700"),
|
|
r.URL.Path,
|
|
ri.Code,
|
|
ri.Body.Len(),
|
|
time.Since(t),
|
|
)
|
|
}
|
|
return gemini.HandlerFunc(fn)
|
|
}
|
|
}
|