github.com/dfklegend/cell2/utils@v0.0.0-20240402033734-a0a9f3d9335d/logger/proxy/proxy.go (about)

     1  package proxy
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
     8  	"github.com/rifflock/lfshook"
     9  	"github.com/sirupsen/logrus"
    10  
    11  	"github.com/dfklegend/cell2/utils/logger/interfaces"
    12  	logruswrapper "github.com/dfklegend/cell2/utils/logger/logrus"
    13  )
    14  
    15  type LogProxy struct {
    16  	Name   string
    17  	Log    interfaces.Logger
    18  	logger *logrus.Logger
    19  }
    20  
    21  func NewLog() *LogProxy {
    22  	return &LogProxy{}
    23  }
    24  
    25  //	TODO: 控制台和文件formatter保持一致
    26  func (p *LogProxy) Init(name string, level logrus.Level) *LogProxy {
    27  	p.Name = name
    28  
    29  	plog := logrus.New()
    30  	f := NewSimpleLogFormat(name)
    31  	plog.SetFormatter(f)
    32  	plog.Level = level
    33  
    34  	log := plog.WithFields(logrus.Fields{
    35  		"source": name,
    36  	})
    37  
    38  	p.Log, p.logger = logruswrapper.NewWithFieldLogger(log), plog
    39  	return p
    40  }
    41  
    42  func (p *LogProxy) SetLogLevel(level logrus.Level) *LogProxy {
    43  	p.logger.SetLevel(level)
    44  	return p
    45  }
    46  
    47  func (p *LogProxy) SetFormatter(formatter logrus.Formatter) *LogProxy {
    48  	p.logger.SetFormatter(formatter)
    49  	return p
    50  }
    51  
    52  func (p *LogProxy) EnableFileLog(prefix, logDir string) *LogProxy {
    53  	path := fmt.Sprintf("%v/%v.%v.%v.log", logDir, prefix, p.Name, "%Y%m%d%H%M")
    54  	writer, _ := rotatelogs.New(
    55  		path,
    56  		rotatelogs.WithLinkName(path),
    57  		// 7 天过期
    58  		rotatelogs.WithMaxAge(time.Duration(7*24*3600)*time.Second),
    59  		// 1 day rotation time
    60  		rotatelogs.WithRotationTime(time.Duration(24*3600)*time.Second),
    61  		// 最大文件
    62  		rotatelogs.WithRotationSize(5*1024*1024),
    63  	)
    64  
    65  	p.logger.Hooks.Add(lfshook.NewHook(
    66  		writer,
    67  		&logrus.TextFormatter{
    68  			DisableQuote: true,
    69  		},
    70  	))
    71  	return p
    72  }