Files
2024-07-18 10:47:38 +08:00

82 lines
1.8 KiB
Go

package xlog
import (
"os"
"time"
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
"github.com/sirupsen/logrus"
prefixed "github.com/x-cray/logrus-prefixed-formatter"
)
type TagHook struct {
Tag string
}
func NewTagHook(tag string) logrus.Hook {
hook := TagHook{
Tag: tag,
}
return &hook
}
func (hook *TagHook) Fire(entry *logrus.Entry) error {
entry.Data["tag"] = hook.Tag
return nil
}
func (hook *TagHook) Levels() []logrus.Level {
return logrus.AllLevels
}
var stdFormatter *prefixed.TextFormatter // 命令行输出格式
var fileFormatter *prefixed.TextFormatter // 文件输出格式
func init() {
stdFormatter = &prefixed.TextFormatter{
FullTimestamp: true,
TimestampFormat: "2006-01-02.15:04:05",
ForceFormatting: true,
ForceColors: false,
DisableColors: true,
}
fileFormatter = &prefixed.TextFormatter{
FullTimestamp: true,
TimestampFormat: "2006-01-02.15:04:05",
ForceFormatting: true,
ForceColors: false,
DisableColors: true,
}
os.MkdirAll("log/SJY01ImageProc", 0755)
configureLogger(logrus.StandardLogger(), "log/SJY01ImageProc/preproc.log", logrus.InfoLevel)
}
func NewLogger(logfile string) *logrus.Logger {
logger := logrus.New()
configureLogger(logger, logfile, logrus.InfoLevel)
return logger
}
func configureLogger(logger *logrus.Logger, logfile string, level logrus.Level) {
logger.SetFormatter(stdFormatter)
logger.SetLevel(logrus.Level(level))
writer, _ := rotatelogs.New(
logfile+".%Y%m%d",
rotatelogs.WithLinkName(logfile),
rotatelogs.WithMaxAge(time.Duration(7*24)*time.Hour),
rotatelogs.WithRotationTime(time.Duration(24)*time.Hour),
)
lfHook := lfshook.NewHook(lfshook.WriterMap{
logrus.InfoLevel: writer,
logrus.DebugLevel: writer,
logrus.ErrorLevel: writer,
}, fileFormatter)
logger.SetOutput(os.Stdout)
logger.AddHook(lfHook)
}