/
logger.go
50 lines (43 loc) · 1.13 KB
/
logger.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package besticon
import (
"io"
"log"
"net/http"
"time"
)
type Logger interface {
LogError(err error)
// LogResponse is called when an HTTP request has been executed. The duration is the time it took to execute the
// request. When error is nil, the response is the response object. Otherwise, the response is nil.
LogResponse(req *http.Request, resp *http.Response, duration time.Duration, err error)
}
func NewDefaultLogger(w io.Writer) Logger {
return &defaultLogger{
logger: log.New(w, "http: ", log.LstdFlags|log.Lmicroseconds),
}
}
var _ Logger = (*defaultLogger)(nil)
type defaultLogger struct {
logger *log.Logger
}
func (d *defaultLogger) LogError(err error) {
d.logger.Println("ERR:", err)
}
func (d *defaultLogger) LogResponse(req *http.Request, resp *http.Response, duration time.Duration, err error) {
if err != nil {
d.logger.Printf("Error: %s %s %s %.2fms",
req.Method,
req.URL,
err,
float64(duration)/float64(time.Millisecond),
)
} else {
d.logger.Printf("%s %s %d %.2fms %d",
req.Method,
req.URL,
resp.StatusCode,
float64(duration)/float64(time.Millisecond),
resp.ContentLength,
)
}
}