1 Star 2 Fork 3

kristas/booting-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
logrus_adapter.go 2.67 KB
一键复制 编辑 原始数据 按行查看 历史
kristas 提交于 2021-04-23 18:42 . feat: add auto configure
package logrus
import (
"fmt"
. "gitee.com/kristas/booting-go/framework/common/util/console"
"gitee.com/kristas/booting-go/framework/common/util/lang"
"gitee.com/kristas/booting-go/framework/core/configure"
"gitee.com/kristas/booting-go/framework/logging"
"github.com/sirupsen/logrus"
"strconv"
"strings"
)
var DefaultAdapter = new(Adapter)
func init() {
logging.Register("logrus", DefaultAdapter)
}
type Adapter struct {
}
func (r *Adapter) CreateLog() logging.Logger {
logger := logrus.New()
logger.SetReportCaller(true)
config := new(logging.Configure)
configure.InjectConfiguration(config)
level, err := logrus.ParseLevel(config.Level)
if err != nil {
level, _ = logrus.ParseLevel("INFO")
}
logger.SetLevel(level)
logger.SetReportCaller(true)
logger.SetFormatter(&FrameFormatter{})
return logger
}
type FrameFormatter struct {
}
func (f *FrameFormatter) Format(entry *logrus.Entry) ([]byte, error) {
data := entry.Data
s := fmt.Sprintf("%s%s%s%s%s ",
Draw(Red, "["+entry.Time.Format("2006-01-02 15:04:05.000")+"]"),
colorLevelMap[strings.ToLower(entry.Level.String())],
Draw(Magenta, "["+packageParser(entry.Caller.Function)+"]"),
Draw(Magenta, "["+entry.Caller.File[strings.LastIndex(entry.Caller.File, "/")+1:]+":"+strconv.Itoa(entry.Caller.Line)+"] - "),
Draw(Cyan, entry.Message))
var skipField = []string{"file", "line", "packageName", "funcName"}
for k, v := range data {
if !contains(skipField, k) {
s += Draw(Blue, fmt.Sprintf("[%s = %s]", k, v))
}
}
return append([]byte(s), '\n'), nil
}
var colorLevelMap = map[string]string{
"trace": levelParser(BlueBold, "trace"),
"debug": levelParser(CyanBold, "debug"),
"info": levelParser(GreenBold, "info"),
"warn": levelParser(YellowBold, "warn"),
"warning": levelParser(YellowBold, "warn"),
"error": levelParser(RedBold, "error"),
"fatal": levelParser(RedBold, "fatal"),
"panic": levelParser(RedBold, "panic"),
}
func levelParser(color int, level string) string {
return Drawf(color, "[%-5s]", level)
//return Draw(color,fmt.Sprintf("[%-5s]",level))
}
type Configure struct {
SkipIndex int `yaml:"skip_index"`
}
func (l *Configure) Prefix() string {
return "logrus"
}
func packageParser(pkg string) string {
split := lang.NewString(pkg).ReplaceAll("/", ".").Split(".")
pkgArr := lang.TransferSliceToSimple(split)
var tmp []string
l := new(Configure)
configure.InjectConfiguration(l)
skipIndex := l.SkipIndex
for i, s := range pkgArr {
if i < skipIndex {
tmp = append(tmp, s[:1])
} else {
tmp = append(tmp, s)
}
}
return strings.Join(tmp, ".")
}
func contains(arr []string, str string) bool {
for i := range arr {
if arr[i] == str {
return true
}
}
return false
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/kristas/booting-go.git
git@gitee.com:kristas/booting-go.git
kristas
booting-go
booting-go
v1.2.8

搜索帮助