first commit
This commit is contained in:
commit
859f5c1b26
7
go.mod
Normal file
7
go.mod
Normal file
@ -0,0 +1,7 @@
|
||||
module git.espin.casa/albert/logger
|
||||
|
||||
go 1.23.1
|
||||
|
||||
require github.com/sirupsen/logrus v1.9.3
|
||||
|
||||
require golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
|
15
go.sum
Normal file
15
go.sum
Normal file
@ -0,0 +1,15 @@
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
138
logger.go
Normal file
138
logger.go
Normal file
@ -0,0 +1,138 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
type LogFields map[string]interface{}
|
||||
|
||||
// Add adds new fields to the list of LogFields.
|
||||
func (l LogFields) Add(newFields LogFields) LogFields {
|
||||
resultFields := make(LogFields, len(l)+len(newFields))
|
||||
|
||||
for field, value := range l {
|
||||
resultFields[field] = value
|
||||
}
|
||||
for field, value := range newFields {
|
||||
resultFields[field] = value
|
||||
}
|
||||
|
||||
return resultFields
|
||||
}
|
||||
|
||||
// Copy copies the LogFields.
|
||||
func (l LogFields) Copy() LogFields {
|
||||
cpy := make(LogFields, len(l))
|
||||
for k, v := range l {
|
||||
cpy[k] = v
|
||||
}
|
||||
|
||||
return cpy
|
||||
}
|
||||
|
||||
type logger struct {
|
||||
log *logrus.Logger
|
||||
}
|
||||
|
||||
// Fatal implements LoggerAdapter fatal level
|
||||
func (l *logger) Fatal(msg string, err error, fields LogFields) {
|
||||
lf := cpyMap(fields)
|
||||
lf["error"] = err.Error()
|
||||
l.log.WithFields(lf).Fatal(msg)
|
||||
}
|
||||
|
||||
// Panic implements LoggerAdapter panic level
|
||||
func (l *logger) Panic(msg string, err error, fields LogFields) {
|
||||
lf := cpyMap(fields)
|
||||
lf["error"] = err.Error()
|
||||
l.log.WithFields(lf).Panic(msg)
|
||||
}
|
||||
|
||||
// Warn implements LoggerAdapter warning level
|
||||
func (l *logger) Warn(msg string, fields LogFields) {
|
||||
lf := cpyMap(fields)
|
||||
l.log.WithFields(lf).Warn(msg)
|
||||
}
|
||||
|
||||
// Debug implements LoggerAdapter debug level
|
||||
func (l *logger) Debug(msg string, fields LogFields) {
|
||||
lf := cpyMap(fields)
|
||||
l.log.WithFields(lf).Debug(msg)
|
||||
}
|
||||
|
||||
// Error implements LoggerAdapter error level
|
||||
func (l *logger) Error(msg string, err error, fields LogFields) {
|
||||
lf := cpyMap(fields)
|
||||
lf["error"] = err.Error()
|
||||
l.log.WithFields(lf).Error(msg)
|
||||
}
|
||||
|
||||
// Info implements LoggerAdapter info level
|
||||
func (l *logger) Info(msg string, fields LogFields) {
|
||||
lf := cpyMap(fields)
|
||||
l.log.WithFields(lf).Info(msg)
|
||||
}
|
||||
|
||||
// Trace implements LoggerAdapter trace level
|
||||
func (l *logger) Trace(msg string, fields LogFields) {
|
||||
lf := cpyMap(fields)
|
||||
l.log.WithFields(lf).Trace(msg)
|
||||
}
|
||||
|
||||
type LoggerAdapter interface {
|
||||
Info(msg string, fields LogFields)
|
||||
Debug(msg string, fields LogFields)
|
||||
Trace(msg string, fields LogFields)
|
||||
Warn(msg string, fields LogFields)
|
||||
Error(msg string, err error, fields LogFields)
|
||||
Fatal(msg string, err error, fields LogFields)
|
||||
Panic(msg string, err error, fields LogFields)
|
||||
}
|
||||
|
||||
func New(out io.Writer, lvl string) LoggerAdapter {
|
||||
level, err := logrus.ParseLevel(lvl)
|
||||
if err != nil {
|
||||
level = logrus.InfoLevel
|
||||
}
|
||||
if lvl == "" {
|
||||
level = logrus.InfoLevel
|
||||
}
|
||||
var log = logrus.New()
|
||||
log.Formatter = new(logrus.JSONFormatter)
|
||||
log.SetFormatter(&logrus.TextFormatter{
|
||||
TimestampFormat: "02-01-2006 15:04:05", // the "time" field configuration
|
||||
FullTimestamp: true,
|
||||
DisableLevelTruncation: true, // log level field configuration
|
||||
CallerPrettyfier: func(f *runtime.Frame) (string, string) {
|
||||
// this function is required when you want to introduce your custom format.
|
||||
// In my case I wanted file and line to look like this `file="engine.go:141`
|
||||
// but f.File provides a full path along with the file name.
|
||||
// So in `formatFilePath()` function I just trimmed everything before the file name
|
||||
// and added a line number in the end
|
||||
return "", fmt.Sprintf("%s:%d", formatFilePath(f.File), f.Line)
|
||||
},
|
||||
})
|
||||
log.Out = out
|
||||
log.Level = level
|
||||
return &logger{
|
||||
log: log,
|
||||
}
|
||||
}
|
||||
|
||||
func formatFilePath(path string) string {
|
||||
arr := strings.Split(path, "/")
|
||||
return arr[len(arr)-1]
|
||||
}
|
||||
|
||||
func cpyMap(fields LogFields) logrus.Fields {
|
||||
copied := make(logrus.Fields)
|
||||
for i, e := range fields {
|
||||
copied[i] = e
|
||||
}
|
||||
return copied
|
||||
}
|
Loading…
Reference in New Issue
Block a user