Add log buffer site
This commit is contained in:
33
logbuffer/logbuffer.go
Normal file
33
logbuffer/logbuffer.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package logbuffer
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"time"
|
||||
)
|
||||
|
||||
func UseLogBuffer(queue *Queue) gin.HandlerFunc {
|
||||
return gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {
|
||||
output := fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"\n",
|
||||
param.ClientIP,
|
||||
param.TimeStamp.Format(time.RFC1123),
|
||||
param.Method,
|
||||
param.Path,
|
||||
param.Request.Proto,
|
||||
param.StatusCode,
|
||||
param.Latency,
|
||||
param.Request.UserAgent(),
|
||||
param.ErrorMessage,
|
||||
)
|
||||
|
||||
// Write the output to our queue
|
||||
queue.push(output)
|
||||
queue.Limit(50)
|
||||
|
||||
// Return nothing
|
||||
return ""
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
44
logbuffer/queue.go
Normal file
44
logbuffer/queue.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package logbuffer
|
||||
|
||||
import "container/list"
|
||||
|
||||
type Queue struct {
|
||||
queue *list.List
|
||||
}
|
||||
|
||||
func New() *Queue{
|
||||
return &Queue{queue: list.New()}
|
||||
}
|
||||
|
||||
func (q Queue)push(value interface{}) {
|
||||
q.queue.PushBack(value)
|
||||
}
|
||||
|
||||
func (q Queue)pop() interface{} {
|
||||
element := q.queue.Front()
|
||||
value := element.Value
|
||||
q.queue.Remove(element)
|
||||
return value
|
||||
}
|
||||
|
||||
func (q Queue)Length() int {
|
||||
return q.queue.Len()
|
||||
}
|
||||
|
||||
// Limit the amount of items in the queue
|
||||
func (q Queue)Limit(items int) {
|
||||
for q.Length() > items {
|
||||
// Remove items
|
||||
q.pop()
|
||||
}
|
||||
}
|
||||
|
||||
func (q Queue)ToSlice() []string {
|
||||
var slice []string
|
||||
element := q.queue.Front()
|
||||
for i := 0; i < q.Length(); i++ {
|
||||
slice = append(slice, element.Value.(string))
|
||||
element = element.Next()
|
||||
}
|
||||
return slice
|
||||
}
|
Reference in New Issue
Block a user