go_dreamfactory/lego/sys/log/formatter.go
2022-11-15 19:41:32 +08:00

70 lines
1.7 KiB
Go

package log
import (
"sync"
"time"
"go_dreamfactory/lego/utils/pools"
)
var _fieldsPool = sync.Pool{
New: func() interface{} {
return make(map[string]interface{})
},
}
func getFields() Fields {
return _fieldsPool.Get().(Fields)
}
func putFields(fields Fields) {
_fieldsPool.Put(fields)
}
func NewDefEncoderConfig() *EncoderConfig {
return &EncoderConfig{
TimeKey: "ts",
LevelKey: "level",
CallerKey: "caller",
MessageKey: "msg",
StacktraceKey: "stacktrace",
ConsoleSeparator: "\t",
EncodeTime: DefTimeEncoder,
EncodeLevel: LowercaseLevelEncoder,
EncodeCaller: ShortCallerEncoder,
}
}
type TimeEncoder func(time.Time) string
type LevelEncoder func(Loglevel) string
type CallerEncoder func(EntryCaller) string
func DefTimeEncoder(t time.Time) string {
return t.Format("2006/01/02 15:04:05.000")
}
func LowercaseLevelEncoder(l Loglevel) string {
return l.CapitalString()
}
func ShortCallerEncoder(caller EntryCaller) string {
return caller.TrimmedPath()
}
type EncoderConfig struct {
MessageKey string `json:"messageKey" yaml:"messageKey"`
LevelKey string `json:"levelKey" yaml:"levelKey"`
TimeKey string `json:"timeKey" yaml:"timeKey"`
CallerKey string `json:"callerKey" yaml:"callerKey"`
FunctionKey string `json:"functionKey" yaml:"functionKey"`
StacktraceKey string `json:"stacktraceKey" yaml:"stacktraceKey"`
ConsoleSeparator string `json:"consoleSeparator" yaml:"consoleSeparator"`
EncodeTime TimeEncoder
EncodeLevel LevelEncoder
EncodeCaller CallerEncoder
}
type Formatter interface {
Format(config *EncoderConfig, entry *Entry) (*pools.Buffer, error)
}