https://github.com/gol4ng/logger-http
Gol4ng logger sub package for http
https://github.com/gol4ng/logger-http
correlation-id go go-logger golang golang-logger http logger middleware tripperware
Last synced: 25 days ago
JSON representation
Gol4ng logger sub package for http
- Host: GitHub
- URL: https://github.com/gol4ng/logger-http
- Owner: gol4ng
- License: mit
- Created: 2019-12-02T09:07:46.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-05-20T12:20:52.000Z (over 3 years ago)
- Last Synced: 2025-08-14T22:49:48.720Z (6 months ago)
- Topics: correlation-id, go, go-logger, golang, golang-logger, http, logger, middleware, tripperware
- Language: Go
- Size: 43 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# logger-http
[](https://travis-ci.org/gol4ng/logger-http)
[](https://goreportcard.com/report/github.com/gol4ng/logger-http)
[](https://godoc.org/github.com/gol4ng/logger-http)
Gol4ng logger sub package for logging http
Related package [gol4ng/logger](https://github.com/gol4ng/logger) and [gol4ng/httpware](https://github.com/gol4ng/httpware)
## Installation
`go get -u github.com/gol4ng/logger-http`
## Quick Start
You can refer at [gol4ng/httpware](https://github.com/gol4ng/httpware) documentation for the middleware/tripperware usage
### Tripperware
Log you're `http.Client` request
```
http client gonna GET http://google.com {"http_url":"http://google.com","http_start_time":"2019-12-13T17:01:13+01:00","http_kind":"client","Correlation-Id":"yhyBI94zyl","http_header":{"Correlation-Id":["yhyBI94zyl"]},"http_method":"GET"}
http client GET http://google.com [status_code:301, duration:39.70726ms, content_length:219] {"Correlation-Id":"yhyBI94zyl","http_start_time":"2019-12-13T17:01:13+01:00","http_method":"GET","http_duration":0.03970726,"http_response_length":219,"http_header":{"Correlation-Id":["yhyBI94zyl"]},"http_url":"http://google.com","http_status":"301 Moved Permanently","http_status_code":301,"http_kind":"client"}
http client gonna GET http://www.google.com/ {"http_kind":"client","Correlation-Id":"uQzaMO9JC0","http_header":{"Correlation-Id":["uQzaMO9JC0"],"Referer":["http://google.com"]},"http_method":"GET","http_url":"http://www.google.com/","http_start_time":"2019-12-13T17:01:13+01:00"}
http client GET http://www.google.com/ [status_code:200, duration:72.582736ms, content_length:-1] {"Correlation-Id":"uQzaMO9JC0","http_header":{"Correlation-Id":["uQzaMO9JC0"],"Referer":["http://google.com"]},"http_method":"GET","http_kind":"client","http_response_length":-1,"http_duration":0.072582736,"http_status_code":200,"http_url":"http://www.google.com/","http_start_time":"2019-12-13T17:01:13+01:00","http_status":"200 OK"}
```
```go
package main
import (
"net/http"
"os"
"github.com/gol4ng/httpware/v4"
"github.com/gol4ng/logger"
"github.com/gol4ng/logger-http/tripperware"
"github.com/gol4ng/logger/formatter"
"github.com/gol4ng/logger/handler"
)
func main(){
// logger will print on STDOUT with default line format
myLogger := logger.NewLogger(handler.Stream(os.Stdout, formatter.NewDefaultFormatter()))
clientStack := httpware.TripperwareStack(
tripperware.InjectLogger(myLogger),
tripperware.CorrelationId(),
tripperware.Logger(myLogger),
)
c := http.Client{
Transport: clientStack.DecorateRoundTripper(http.DefaultTransport),
}
c.Get("http://google.com")
// Will log
// http client GET http://google.com [status_code:301, duration:27.524999ms, content_length:219] {"http_duration":0.027524999,"http_status":"301 Moved Permanently","http_status_code":301,"http_response_length":219,"http_method":"GET","http_url":"http://google.com","http_start_time":"2019-12-03T10:47:38+01:00","http_kind":"client"}
// http client GET http://www.google.com/ [status_code:200, duration:51.047002ms, content_length:-1] {"http_kind":"client","http_duration":0.051047002,"http_status":"200 OK","http_status_code":200,"http_response_length":-1,"http_method":"GET","http_url":"http://www.google.com/","http_start_time":"2019-12-03T10:47:38+01:00"}
}
```
### Middleware
Log you're incoming http server request
```
http server received GET / {"http_url":"/","http_start_time":"2019-12-13T17:15:30+01:00","http_kind":"server","Correlation-Id":"SBeEdhRhUl","http_header":{"Accept-Encoding":["gzip"],"Correlation-Id":["SBeEdhRhUl"],"User-Agent":["Go-http-client/1.1"]},"http_method":"GET"}
handler log info {"Correlation-Id":"SBeEdhRhUl"}
http server GET / [status_code:200, duration:290.156µs, content_length:0] {"http_kind":"server","http_duration":0.000290156,"http_status_code":200,"Correlation-Id":"SBeEdhRhUl","http_method":"GET","http_url":"/","http_start_time":"2019-12-13T17:15:30+01:00","http_status":"OK","http_response_length":0,"http_header":{"Accept-Encoding":["gzip"],"Correlation-Id":["SBeEdhRhUl"],"User-Agent":["Go-http-client/1.1"]}}
```
```go
package main
import (
"context"
"net"
"net/http"
"os"
"github.com/gol4ng/httpware/v4"
"github.com/gol4ng/logger"
"github.com/gol4ng/logger-http/middleware"
"github.com/gol4ng/logger/formatter"
"github.com/gol4ng/logger/handler"
)
func main() {
addr := ":5001"
myLogger := logger.NewLogger(
handler.Stream(os.Stdout, formatter.NewDefaultFormatter()),
)
// we recommend to use MiddlewareStack to simplify managing all wanted middlewares
// caution middleware order matters
stack := httpware.MiddlewareStack(
//middleware.InjectLogger(myLogger), // we recommend to use http.Server.BaseContext instead of this middleware
middleware.CorrelationId(),
middleware.Logger(myLogger),
)
h := http.HandlerFunc(func(writer http.ResponseWriter, innerRequest *http.Request) {
l := logger.FromContext(innerRequest.Context(), myLogger)
l.Info("handler log info", nil)
})
server := http.Server{
Addr: addr,
Handler: stack.DecorateHandler(h),
BaseContext: func(listener net.Listener) context.Context {
return logger.InjectInContext(context.Background(), myLogger)
},
}
go func() {
if err := server.ListenAndServe(); err != nil {
panic(err)
}
}()
http.Get("http://localhost" + addr)
// http server received GET / {"Correlation-Id":"zEDWO9gmZ6","http_header":{"Accept-Encoding":["gzip"],"Correlation-Id":["zEDWO9gmZ6"],"User-Agent":["Go-http-client/1.1"]},"http_method":"GET","http_url":"/","http_start_time":"2019-12-13T17:05:53+01:00","http_kind":"server"}
// handler log info {"Correlation-Id":"zEDWO9gmZ6"}
// http server GET / [status_code:200, duration:232.491µs, content_length:0] {"Correlation-Id":"zEDWO9gmZ6","http_header":{"Accept-Encoding":["gzip"],"Correlation-Id":["zEDWO9gmZ6"],"User-Agent":["Go-http-client/1.1"]},"http_method":"GET","http_url":"/","http_start_time":"2019-12-13T17:05:53+01:00","http_duration":0.000232491,"http_status":"OK","http_status_code":200,"http_kind":"server","http_response_length":0}
}
```