1 Star 0 Fork 0

ltotal / ppw_gin

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
logger.go 2.97 KB
一键复制 编辑 原始数据 按行查看 历史
package pkg
import (
"bytes"
"fmt"
"github.com/SkyAPM/go2sky"
"github.com/sirupsen/logrus"
"os"
"path/filepath"
"strings"
"time"
)
type LoggerPkg struct {
*logrus.Logger
}
var Logger *LoggerPkg
func init() {
Logger = NewLogger("")
}
func NewLogger(logDir string) *LoggerPkg {
Logger = &LoggerPkg{logrus.New()}
Logger.SetReportCaller(true)
Logger.SetFormatter(&CustomLogFormatter{})
Logger.AddHook(&CustomLogHook{LogDir: logDir})
return Logger
}
func (p *LoggerPkg) WithContent(content string) *logrus.Entry {
return p.WithFields(logrus.Fields{
"content": content,
})
}
type CustomLogFormatter struct{}
func (c *CustomLogFormatter) Format(entry *logrus.Entry) ([]byte, error) {
var b *bytes.Buffer
if entry.Buffer != nil {
b = entry.Buffer
} else {
b = &bytes.Buffer{}
}
timestamp := entry.Time.Format("2006-01-02 15:04:05")
var newLog string
if entry.HasCaller() {
fName := filepath.Base(entry.Caller.File)
funcName := entry.Caller.Function
lastSlashIndex := strings.LastIndex(funcName, "/")
if lastSlashIndex != -1 && lastSlashIndex < len(funcName)-1 {
simplifiedString := funcName[lastSlashIndex+1:]
funcName = simplifiedString
}
newLog = fmt.Sprintf("[%s] [%s] [%s:%d %s] [%s] [%s] [%s]\n",
timestamp, entry.Level, fName, entry.Caller.Line, funcName,
entry.Data["trace_id"], entry.Message, entry.Data["content"])
} else {
newLog = fmt.Sprintf("[%s] [%s] [%s] [%s] [%s]\n", timestamp, entry.Level, entry.Data["trace_id"], entry.Message, entry.Data["content"])
}
b.WriteString(newLog)
return b.Bytes(), nil
}
type CustomLogHook struct {
LogDir string
}
func (hook *CustomLogHook) Fire(entry *logrus.Entry) error {
if entry.Data["content"] == nil {
entry.Data["content"] = ""
}
if entry.Context != nil {
var traceId string
_, existed := GCM.GetContext(entry.Context)
if existed {
span, _, err := Tracer.CreateLocalSpan(entry.Context, LocalSpanOptions{
OperationName: fmt.Sprintf("log[%s]: %s", entry.Level.String(), entry.Message),
})
if err == nil {
defer span.End()
span.Tag("log.title", entry.Message)
if entry.Data["content"] != "" {
span.Log(time.Now(), entry.Data["content"].(string))
}
}
traceId = go2sky.TraceID(entry.Context)
}
entry.Data["trace_id"] = traceId
}
logDir := hook.LogDir
if logDir == "" {
dir, _ := os.Getwd()
logDir = dir + "/log"
}
path := logDir + "/" + time.Now().Format("200601")
if _, err := os.Stat(path); os.IsNotExist(err) {
makeErr := os.MkdirAll(path, os.ModePerm)
if makeErr != nil {
panic("日志路径创建失败: " + path)
}
}
logName := fmt.Sprintf("%s_%s", "log", time.Now().Format("20060102"))
logFile, err := os.OpenFile(fmt.Sprintf(path+"/%s.log", logName), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
Logger.Fatal("打开日志文件失败: ", err)
}
Logger.SetOutput(logFile)
return nil
}
func (hook *CustomLogHook) Levels() []logrus.Level {
return []logrus.Level{logrus.InfoLevel, logrus.DebugLevel, logrus.ErrorLevel}
}
1
https://gitee.com/ltotal/ppw_gin.git
git@gitee.com:ltotal/ppw_gin.git
ltotal
ppw_gin
ppw_gin
v0.8.2

搜索帮助

53164aa7 5694891 3bd8fe86 5694891