You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
1.7 KiB

package logger
import (
"fmt"
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
"github.com/sirupsen/logrus"
"path"
"strings"
"time"
)
// 定义自己的Writer
type RdsLoggerWriter struct {
logger *logrus.Logger
}
// 实现gorm/logger.Writer接口
func (r *RdsLoggerWriter) Printf(format string, v ...interface{}) {
r.logger.Info(fmt.Sprintf(format, v...))
}
type RdsLogFormatter struct{}
func (s *RdsLogFormatter) Format(entry *logrus.Entry) ([]byte, error) {
local, _ := time.LoadLocation("Asia/Shanghai")
timestamp := time.Now().In(local).Format("2006-01-02 15:04:05")
//fmt.Println(entry.Data)
msg := fmt.Sprintf(
"[GOID:%d] [%s] %s %s\n",
getGID(),
strings.ToUpper(entry.Level.String()),
timestamp,
entry.Message)
return []byte(msg), nil
}
func newRdsLoggerWriter(LogFilePath string, LogFileName string, LoggerInstance *logrus.Logger, RunMode string) *RdsLoggerWriter {
//配置logrus
fileName := path.Join(LogFilePath, LogFileName)
outSelect(LoggerInstance, RunMode)
logWriter, _ := rotatelogs.New(
// 分割后的文件名称
fileName+".%Y%m%d.log",
// 生成软链,指向最新日志文件
rotatelogs.WithLinkName(fileName),
// 设置最大保存时间(7天)
rotatelogs.WithMaxAge(7*24*time.Hour),
// 设置日志切割时间间隔(1天)
rotatelogs.WithRotationTime(24*time.Hour),
)
writeMap := lfshook.WriterMap{
logrus.InfoLevel: logWriter,
logrus.FatalLevel: logWriter,
logrus.DebugLevel: logWriter,
logrus.WarnLevel: logWriter,
logrus.ErrorLevel: logWriter,
logrus.PanicLevel: logWriter,
}
lfHook := lfshook.NewHook(writeMap, &RdsLogFormatter{})
// 新增 Hook
LoggerInstance.AddHook(lfHook)
return &RdsLoggerWriter{logger: LoggerInstance}
}