From f34be1f3c01544542e4c417636b378fb68ae1221 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Wed, 13 Sep 2023 18:09:54 +0530 Subject: [PATCH] Add colors to http log --- go.mod | 6 ++++++ go.sum | 9 +++++++++ internal/api/log.go | 38 +++++++++++++++++++++++--------------- 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index bc75de160..83a17768e 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,12 @@ require ( ) require ( + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect +) + +require ( + github.com/fatih/color v1.15.0 github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect diff --git a/go.sum b/go.sum index 631e3ac55..252cd66a5 100644 --- a/go.sum +++ b/go.sum @@ -55,6 +55,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -139,6 +141,11 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= @@ -322,6 +329,8 @@ golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/internal/api/log.go b/internal/api/log.go index 87846ee0b..ba97c0d86 100644 --- a/internal/api/log.go +++ b/internal/api/log.go @@ -2,49 +2,57 @@ package api import ( "fmt" - "github.com/go-resty/resty/v2" "strings" + + "github.com/fatih/color" + "github.com/go-resty/resty/v2" ) func logRequest(req *resty.Request) { - fmt.Println("Request:") - fmt.Printf("Method: %s\n", req.Method) - fmt.Printf("URL: %s\n", req.URL) - fmt.Println("Headers:") + fmt.Println(color.GreenString("Request:")) + fmt.Printf("%s %s\n", color.CyanString(req.Method), color.YellowString(req.URL)) + fmt.Println(color.GreenString("Headers:")) for k, v := range req.Header { redacted := false for _, rh := range RedactedHeaders { - if strings.ToLower(k) == strings.ToLower(rh) { + if strings.EqualFold(strings.ToLower(k), strings.ToLower(rh)) { redacted = true break } } if redacted { - fmt.Printf("%s: %s\n", k, "REDACTED") + fmt.Printf("%s: %s\n", color.CyanString(k), color.RedString("REDACTED")) } else { - fmt.Printf("%s: %s\n", k, v) + if len(v) == 1 { + fmt.Printf("%s: %s\n", color.CyanString(k), color.YellowString(v[0])) + } else { + fmt.Printf("%s: %s\n", color.CyanString(k), color.YellowString(strings.Join(v, ","))) + } } } } func logResponse(resp *resty.Response) { - fmt.Println("Response:") - fmt.Printf("Status Code: %d\n", resp.StatusCode()) - fmt.Printf("Protocol: %s\n", resp.Proto()) + fmt.Println(color.GreenString("Response:")) + if resp.StatusCode() < 200 || resp.StatusCode() >= 300 { + fmt.Printf("%s %s\n", color.CyanString(resp.Proto()), color.RedString(resp.Status())) + } else { + fmt.Printf("%s %s\n", color.CyanString(resp.Proto()), color.YellowString(resp.Status())) + } fmt.Printf("Time Duration: %s\n", resp.Time()) - fmt.Println("Headers:") + fmt.Println(color.GreenString("Headers:")) for k, v := range resp.Header() { redacted := false for _, rh := range RedactedHeaders { - if strings.ToLower(k) == strings.ToLower(rh) { + if strings.EqualFold(strings.ToLower(k), strings.ToLower(rh)) { redacted = true break } } if redacted { - fmt.Printf("%s: %s\n", k, "REDACTED") + fmt.Printf("%s: %s\n", color.CyanString(k), color.RedString("REDACTED")) } else { - fmt.Printf("%s: %s\n", k, v) + fmt.Printf("%s: %s\n", color.CyanString(k), color.YellowString(strings.Join(v, ","))) } } }