2022-09-05 10:06:44 +02:00
|
|
|
// Package logx contains logging extensions
|
|
|
|
package logx
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"os"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/apex/log"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Handler implements github.com/apex/log.Handler.
|
|
|
|
type Handler struct {
|
|
|
|
// Emoji is OPTIONAL and indicates whether to enable emojis.
|
|
|
|
Emoji bool
|
|
|
|
|
|
|
|
// Now is the MANDATORY function to compute the current time.
|
|
|
|
Now func() time.Time
|
|
|
|
|
|
|
|
// StartTime is MANDATORY and indicates when we started logging.
|
|
|
|
StartTime time.Time
|
|
|
|
|
|
|
|
// Writer is MANDATORY and is the underlying writer.
|
|
|
|
io.Writer
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewHandlerWithDefaultSettings creates a new Handler with default settings.
|
|
|
|
func NewHandlerWithDefaultSettings() *Handler {
|
|
|
|
return &Handler{
|
|
|
|
Emoji: false,
|
|
|
|
Now: time.Now,
|
|
|
|
StartTime: time.Now(),
|
|
|
|
Writer: os.Stderr,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var _ log.Handler = &Handler{}
|
|
|
|
|
|
|
|
// HandleLog implements log.Handler
|
|
|
|
func (h *Handler) HandleLog(e *log.Entry) (err error) {
|
|
|
|
level := fmt.Sprintf("<%s>", e.Level.String())
|
|
|
|
if h.Emoji {
|
|
|
|
switch e.Level {
|
|
|
|
case log.DebugLevel:
|
|
|
|
level = "🧐"
|
|
|
|
case log.InfoLevel:
|
2022-09-05 13:33:59 +02:00
|
|
|
level = " "
|
2022-09-05 10:06:44 +02:00
|
|
|
case log.WarnLevel:
|
|
|
|
level = "🔥"
|
|
|
|
default:
|
|
|
|
// keep the original string
|
|
|
|
}
|
|
|
|
}
|
|
|
|
elapsed := h.Now().Sub(h.StartTime)
|
|
|
|
s := fmt.Sprintf("[%14.6f] %s %s", elapsed.Seconds(), level, e.Message)
|
|
|
|
if len(e.Fields) > 0 {
|
|
|
|
s += fmt.Sprintf(": %+v", e.Fields)
|
|
|
|
}
|
|
|
|
s += "\n"
|
|
|
|
_, err = h.Writer.Write([]byte(s))
|
|
|
|
return
|
|
|
|
}
|