This commit is contained in:
henry
2021-11-02 09:43:19 +08:00
parent 570bb3c772
commit 4734344985
78 changed files with 4798 additions and 0 deletions

89
serve/logger/hook.go Normal file
View File

@ -0,0 +1,89 @@
package logger
import (
"Edu/utils"
"fmt"
"os"
"path/filepath"
"runtime"
"time"
nested "github.com/antonfisher/nested-logrus-formatter"
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
log "github.com/sirupsen/logrus"
)
// Hook
type Hook struct {
Path string
File string
}
// Levels 只定义 error, warn, panic 等级的日志,其他日志等级不会触发 hook
func (this *Hook) Levels() []log.Level {
return []log.Level{
log.WarnLevel,
log.ErrorLevel,
log.PanicLevel,
}
}
// Fire 将异常日志写入到指定日志文件中
func (this *Hook) Fire(entry *log.Entry) error {
if isExist, _ := utils.PathExists(this.Path); !isExist {
utils.MkdirAll(this.Path)
}
f, err := os.OpenFile(this.Path+this.File, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
return err
}
_, err = f.Write(utils.AnyToByte(entry.Data))
return err
}
func formatter(isConsole bool) *nested.Formatter {
fmtter := &nested.Formatter{
HideKeys: true,
TimestampFormat: "2006-01-02 15:04:05",
CallerFirst: true,
CustomCallerFormatter: func(frame *runtime.Frame) string {
funcInfo := runtime.FuncForPC(frame.PC)
if funcInfo == nil {
return "error during runtime.FuncForPC"
}
fullPath, line := funcInfo.FileLine(frame.PC)
return fmt.Sprintf(" [%v:%v]", filepath.Base(fullPath), line)
},
}
if isConsole {
fmtter.NoColors = false
} else {
fmtter.NoColors = true
}
return fmtter
}
// NewHook
func NewHook(logName string, rotationTime time.Duration, leastDay uint) log.Hook {
writer, err := rotatelogs.New(
// 日志文件
logName+".%Y%m%d",
rotatelogs.WithRotationCount(leastDay), // 只保留最近的N个日志文件
)
if err != nil {
panic(err)
}
lfsHook := lfshook.NewHook(lfshook.WriterMap{
log.DebugLevel: writer,
log.InfoLevel: writer,
log.WarnLevel: writer,
log.ErrorLevel: writer,
log.FatalLevel: writer,
log.PanicLevel: writer,
}, formatter(false))
return lfsHook
}

63
serve/logger/init.go Normal file
View File

@ -0,0 +1,63 @@
package logger
import (
"io"
"os"
log "github.com/sirupsen/logrus"
)
type Logger struct {
*Option
Logger *log.Logger
}
type Option struct {
File string `json:"file"`
LeastDay uint `json:"least_day"`
Level string `json:"level"`
IsStdout bool `json:"is_stdout"`
}
var logger *log.Logger
var loggerLevel = map[string]log.Level{
"debug": log.DebugLevel,
"info": log.InfoLevel,
"warn": log.WarnLevel,
"error": log.ErrorLevel,
}
func (this *Logger) level() log.Level {
if _, has := loggerLevel[this.Level]; !has {
return log.ErrorLevel
}
return loggerLevel[this.Level]
}
func (this *Logger) Load() {
logger = this.Logger
}
func (this *Logger) Init(option *Option) *Logger {
this.Option = option
logger = log.New()
logger.SetFormatter(&log.JSONFormatter{TimestampFormat: "2006-01-02 15:04:05"})
logger.SetReportCaller(true)
logger.AddHook(NewHook(this.File, 0, this.LeastDay))
if this.IsStdout {
logger.SetOutput(io.MultiWriter(os.Stdout))
}
logger.SetFormatter(formatter(true))
logger.SetLevel(this.level())
this.Logger = logger
return this
}
func NewLogger() *Logger {
return &Logger{}
}

37
serve/logger/serve.go Normal file
View File

@ -0,0 +1,37 @@
package logger
import "github.com/sirupsen/logrus"
func Warn(args ...interface{}) {
logger.Log(logrus.WarnLevel, args...)
}
func Error(args ...interface{}) {
logger.Log(logrus.ErrorLevel, args...)
}
func Fatal(args ...interface{}) {
logger.Log(logrus.FatalLevel, args...)
logger.Exit(1)
}
func Panic(args ...interface{}) {
logger.Log(logrus.PanicLevel, args...)
}
func WarnF(format string, args ...interface{}) {
logger.Logf(logrus.WarnLevel, format, args...)
}
func ErrorF(format string, args ...interface{}) {
logger.Logf(logrus.ErrorLevel, format, args...)
}
func FatalF(format string, args ...interface{}) {
logger.Logf(logrus.FatalLevel, format, args...)
logger.Exit(1)
}
func PanicF(format string, args ...interface{}) {
logger.Logf(logrus.PanicLevel, format, args...)
}