tidy source files
separating logging and web serving into modules
This commit is contained in:
parent
3c38fa2f7f
commit
d40dec3566
4 changed files with 273 additions and 242 deletions
57
log/main.go
Normal file
57
log/main.go
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
package log
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type LoggingResponseWriter struct {
|
||||
http.ResponseWriter
|
||||
Status int
|
||||
}
|
||||
|
||||
var COL_Reset = "\033[0m"
|
||||
var COL_Red = "\033[31m"
|
||||
var COL_Green = "\033[32m"
|
||||
var COL_Yellow = "\033[33m"
|
||||
var COL_Blue = "\033[34m"
|
||||
var COL_Purple = "\033[35m"
|
||||
var COL_Cyan = "\033[36m"
|
||||
var COL_Gray = "\033[37m"
|
||||
var COL_White = "\033[97m"
|
||||
|
||||
func HTTPLog(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
start := time.Now()
|
||||
|
||||
lrw := LoggingResponseWriter{w, http.StatusOK}
|
||||
|
||||
next.ServeHTTP(&lrw, r)
|
||||
|
||||
after := time.Now()
|
||||
difference := (after.Nanosecond() - start.Nanosecond()) / 1_000_000
|
||||
elapsed := "<1"
|
||||
if difference >= 1 {
|
||||
elapsed = strconv.Itoa(difference)
|
||||
}
|
||||
|
||||
statusColour := COL_Reset
|
||||
|
||||
if lrw.Status - 600 <= 0 { statusColour = COL_Red }
|
||||
if lrw.Status - 500 <= 0 { statusColour = COL_Yellow }
|
||||
if lrw.Status - 400 <= 0 { statusColour = COL_White }
|
||||
if lrw.Status - 300 <= 0 { statusColour = COL_Green }
|
||||
|
||||
fmt.Printf("[%s] %s %s - %s%d%s (%sms) (%s)\n",
|
||||
after.Format(time.UnixDate),
|
||||
r.Method,
|
||||
r.URL.Path,
|
||||
statusColour,
|
||||
lrw.Status,
|
||||
COL_Reset,
|
||||
elapsed,
|
||||
r.Header["User-Agent"][0])
|
||||
})
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue