Skip to content

Commit

Permalink
Add option to skip logging specified endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
zaynetro committed Jul 22, 2015
1 parent fd5d429 commit f13c3ae
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 21 deletions.
55 changes: 34 additions & 21 deletions logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,17 @@ func Logger() HandlerFunc {

// Instance a Logger middleware with the specified writter buffer.
// Example: os.Stdout, a file opened in write mode, a socket...
func LoggerWithWriter(out io.Writer) HandlerFunc {
func LoggerWithWriter(out io.Writer, notlogged ...string) HandlerFunc {
var skip map[string]struct{}

if length := len(notlogged); length > 0 {
skip = make(map[string]struct{}, length)

for _, path := range notlogged {
skip[path] = struct{}{}
}
}

return func(c *Context) {
// Start timer
start := time.Now()
Expand All @@ -55,26 +65,29 @@ func LoggerWithWriter(out io.Writer) HandlerFunc {
// Process request
c.Next()

// Stop timer
end := time.Now()
latency := end.Sub(start)

clientIP := c.ClientIP()
method := c.Request.Method
statusCode := c.Writer.Status()
statusColor := colorForStatus(statusCode)
methodColor := colorForMethod(method)
comment := c.Errors.ByType(ErrorTypePrivate).String()

fmt.Fprintf(out, "[GIN] %v |%s %3d %s| %13v | %s |%s %s %-7s %s\n%s",
end.Format("2006/01/02 - 15:04:05"),
statusColor, statusCode, reset,
latency,
clientIP,
methodColor, reset, method,
path,
comment,
)
// Log only when path is not being skipped
if _, ok := skip[path]; !ok {
// Stop timer
end := time.Now()
latency := end.Sub(start)

clientIP := c.ClientIP()
method := c.Request.Method
statusCode := c.Writer.Status()
statusColor := colorForStatus(statusCode)
methodColor := colorForMethod(method)
comment := c.Errors.ByType(ErrorTypePrivate).String()

fmt.Fprintf(out, "[GIN] %v |%s %3d %s| %13v | %s |%s %s %-7s %s\n%s",
end.Format("2006/01/02 - 15:04:05"),
statusColor, statusCode, reset,
latency,
clientIP,
methodColor, reset, method,
path,
comment,
)
}
}
}

Expand Down
14 changes: 14 additions & 0 deletions logger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,17 @@ func TestErrorLogger(t *testing.T) {
assert.Equal(t, w.Code, 500)
assert.Equal(t, w.Body.String(), "hola!")
}

func TestSkippingPaths(t *testing.T) {
buffer := new(bytes.Buffer)
router := New()
router.Use(LoggerWithWriter(buffer, "/skipped"))
router.GET("/logged", func(c *Context) {})
router.GET("/skipped", func(c *Context) {})

performRequest(router, "GET", "/logged")
assert.Contains(t, buffer.String(), "200")

performRequest(router, "GET", "/skipped")
assert.Contains(t, buffer.String(), "")
}

0 comments on commit f13c3ae

Please sign in to comment.