Refactoring: implement proper JSON logging, better structure for app layers
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
package jsonlog
|
||||
|
||||
import "github.com/sirupsen/logrus"
|
||||
|
||||
type Level logrus.Level
|
||||
|
||||
const (
|
||||
FatalLevel = Level(logrus.FatalLevel)
|
||||
ErrorLevel = Level(logrus.ErrorLevel)
|
||||
WarnLevel = Level(logrus.WarnLevel)
|
||||
InfoLevel = Level(logrus.InfoLevel)
|
||||
DebugLevel = Level(logrus.DebugLevel)
|
||||
)
|
||||
@@ -0,0 +1,49 @@
|
||||
package jsonlog
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
const appNameKey = "app_name"
|
||||
|
||||
var fieldMap = logrus.FieldMap{
|
||||
logrus.FieldKeyTime: "@timestamp",
|
||||
logrus.FieldKeyMsg: "message",
|
||||
}
|
||||
|
||||
type Logger interface {
|
||||
Info(...interface{})
|
||||
Error(error, ...interface{})
|
||||
FatalError(error, ...interface{})
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
AppName string
|
||||
Level Level
|
||||
}
|
||||
|
||||
func NewLogger(config *Config) Logger {
|
||||
impl := logrus.New()
|
||||
impl.SetFormatter(&logrus.JSONFormatter{
|
||||
TimestampFormat: time.RFC3339Nano,
|
||||
FieldMap: fieldMap,
|
||||
})
|
||||
impl.SetLevel(logrus.Level(config.Level))
|
||||
return &logger{
|
||||
FieldLogger: impl.WithField(appNameKey, config.AppName),
|
||||
}
|
||||
}
|
||||
|
||||
type logger struct {
|
||||
logrus.FieldLogger
|
||||
}
|
||||
|
||||
func (l *logger) Error(err error, args ...interface{}) {
|
||||
l.FieldLogger.WithError(err).Error(args)
|
||||
}
|
||||
|
||||
func (l *logger) FatalError(err error, args ...interface{}) {
|
||||
l.FieldLogger.WithError(err).Fatal(args...)
|
||||
}
|
||||
Reference in New Issue
Block a user