mh_goadmin_server/logger/logx.go

120 lines
2.4 KiB
Go
Raw Permalink Normal View History

2023-10-13 09:51:56 +00:00
package logger
import (
"context"
"fmt"
2023-10-13 09:51:56 +00:00
"github.com/sirupsen/logrus"
"go-admin/tools/config"
"gopkg.in/natefinch/lumberjack.v2"
"path/filepath"
"time"
2023-10-13 09:51:56 +00:00
)
var l *Logx
var TraceIdKey = "trace_id"
type Logx struct {
*logrus.Logger
ctx *context.Context
}
type LogField struct {
Key string
Value interface{}
}
func init() {
Setup()
}
func Setup() {
2023-10-13 09:51:56 +00:00
ctx := context.Background()
l = &Logx{
Logger: logrus.New(),
ctx: &ctx,
}
// 设置json格式
2023-10-13 09:51:56 +00:00
l.SetFormatter(&logrus.JSONFormatter{TimestampFormat: "2006-01-02 15:04:05"})
// 设置最低loglevel
l.SetLevel(logrus.InfoLevel)
// 设置输出到文件
logFileName := getLogFileName()
fileLogger := &lumberjack.Logger{
Filename: logFileName,
MaxSize: 100, // 每个日志文件的最大尺寸,单位为 MB
MaxBackups: 5, // 保留旧日志文件的最大个数
MaxAge: 60, // 保留旧日志文件的最大天数
Compress: true, // 是否压缩旧日志文件
}
defer fileLogger.Close()
// 将日志同时输出到文件和控制台
//l.SetOutput(io.MultiWriter(os.Stdout, fileLogger))
l.SetOutput(fileLogger)
}
2023-11-15 10:17:35 +00:00
// 获取日志文件名,按照 server-2023-12-01.log 的格式
func getLogFileName() string {
currentTime := time.Now().Format("2006-01-02")
logFileName := fmt.Sprintf("server-%s.log", currentTime)
// 可以指定日志文件存储的路径
logFilePath := config.LoggerConfig.Path
return filepath.Join(logFilePath, logFileName)
2023-10-13 09:51:56 +00:00
}
func WithContext(ctx context.Context) {
l.ctx = &ctx
}
func Field(key string, value interface{}) *LogField {
return &LogField{Key: key, Value: value}
}
func Info(msg string, fields ...*LogField) {
e := newEntry(fields...)
e.Info(msg)
}
func Error(msg string, fields ...*LogField) {
e := newEntry(fields...)
e.Error(msg)
}
func Debug(msg string, fields ...*LogField) {
e := newEntry(fields...)
e.Debug(msg)
}
func Warning(msg string, fields ...*LogField) {
e := newEntry(fields...)
e.Warning(msg)
}
func newEntry(fields ...*LogField) *logrus.Entry {
e := logrus.NewEntry(l.Logger)
traceId, ok := (*l.ctx).Value(TraceIdKey).(string)
if ok {
e = e.WithField("trace_id", traceId)
}
for _, field := range fields {
e = e.WithField(field.Key, field.Value)
}
return e
}
func Errorf(format string, args ...interface{}) {
l.Errorf(format, args)
}
2023-10-14 08:19:04 +00:00
func Fatal(args ...interface{}) {
2023-10-13 09:51:56 +00:00
l.Fatal(args)
}
2023-10-14 08:19:04 +00:00
func Println(args ...interface{}) {
l.Println(args)
}