mirror of
https://gitlab.52pay.top/go/easygoadmin.git
synced 2025-09-26 22:47:58 +08:00
119 lines
3.4 KiB
Go
119 lines
3.4 KiB
Go
// Copyright © 2022 Yaoyilin <46807924@qq.com>
|
|
|
|
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
rotatelogs "github.com/lestrrat/go-file-rotatelogs"
|
|
"github.com/rifflock/lfshook"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/toolkits/file"
|
|
prefixed "github.com/x-cray/logrus-prefixed-formatter"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
var logger *logrus.Logger
|
|
var logLevels = map[string]logrus.Level{
|
|
"PANIC": logrus.PanicLevel,
|
|
// FatalLevel level. Logs and then calls `logger.Exit(1)`. It will exit even if the
|
|
// logging level is set to Panic.
|
|
"FATAL": logrus.FatalLevel,
|
|
// ErrorLevel level. Logs. Used for errors that should definitely be noted.
|
|
// Commonly used for hooks to send errors to an error tracking service.
|
|
"ERROR": logrus.ErrorLevel,
|
|
// WarnLevel level. Non-critical entries that deserve eyes.
|
|
"WARN": logrus.WarnLevel,
|
|
// InfoLevel level. General operational entries about what's going on inside the
|
|
// application.
|
|
"INFO": logrus.InfoLevel,
|
|
// DebugLevel level. Usually only enabled when debugging. Very verbose logging.
|
|
"DEBUG": logrus.DebugLevel,
|
|
// TraceLevel level. Designates finer-grained informational events than the Debug.
|
|
"TRACE": logrus.TraceLevel,
|
|
}
|
|
|
|
// NewLogRusLogger New LogRus l
|
|
func NewLogRusLogger(logfile, logLevel string) (*logrus.Logger, error) {
|
|
var (
|
|
err error
|
|
)
|
|
if logger != nil {
|
|
return logger, nil
|
|
}
|
|
logger, err = newLogRus(logfile, logLevel)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return logger, nil
|
|
}
|
|
|
|
func newLogRus(logfile, logLevel string) (*logrus.Logger, error) {
|
|
// logger := logrus.New()
|
|
logDir := GetDir(logfile)
|
|
var (
|
|
found bool
|
|
err error
|
|
)
|
|
if found, err = CheckDirExist(logDir); err != nil {
|
|
return nil, err
|
|
}
|
|
if !found {
|
|
if err = MkdirAll(logDir); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
if logDir == logfile || logfile == "" {
|
|
logfile = filepath.Join(logDir, "default.log")
|
|
}
|
|
|
|
formatter := new(prefixed.TextFormatter)
|
|
formatter.DisableColors = true
|
|
formatter.DisableSorting = true
|
|
formatter.FullTimestamp = true // 显示完整时间
|
|
formatter.TimestampFormat = "2006-01-02 15:04:05.999999" // 时间格式
|
|
formatter.DisableTimestamp = false // 禁止显示时间
|
|
// formatter.ForceFormatting = true
|
|
writer, err := rotatelogs.New(
|
|
logfile+".%Y%m%d",
|
|
rotatelogs.WithLinkName(logfile), // 生成软链,指向最新日志文件
|
|
rotatelogs.WithMaxAge(30*24*time.Hour), // 文件最大保存时间
|
|
rotatelogs.WithRotationTime(24*time.Hour), // 日志切割时间间隔
|
|
rotatelogs.WithLocation(time.Local),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
logLevel = strings.ToUpper(logLevel)
|
|
level, ok := logLevels[logLevel]
|
|
if !ok {
|
|
return nil, fmt.Errorf("the log level not support. please set INFO,WARN,ERROR,DEBUG,TRACE")
|
|
}
|
|
// io.MultiWriter(os.Stdout)
|
|
lfHook := lfshook.NewHook(lfshook.WriterMap{
|
|
// logrus.DebugLevel: writer, // 为不同级别设置不同的输出目的
|
|
logrus.InfoLevel: os.Stdout,
|
|
logrus.WarnLevel: os.Stdout,
|
|
logrus.ErrorLevel: os.Stdout,
|
|
logrus.FatalLevel: os.Stdout,
|
|
logrus.PanicLevel: os.Stdout,
|
|
}, formatter)
|
|
logrus.SetFormatter(&logrus.JSONFormatter{})
|
|
logrus.SetLevel(level)
|
|
logrus.AddHook(lfHook)
|
|
logrus.SetOutput(writer)
|
|
logrus.SetReportCaller(true)
|
|
logger = logrus.New()
|
|
return logger, nil
|
|
}
|
|
|
|
func GetLogDir(s string) string {
|
|
if file.IsFile(s) || strings.HasSuffix(s, ".log") {
|
|
s = file.Dir(s)
|
|
}
|
|
return s
|
|
}
|