123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- package log
- // import (
- // "fmt"
- // "sync"
- // "time"
- // rotatelogs "github.com/lestrrat-go/file-rotatelogs"
- // lfshook "github.com/rifflock/lfshook"
- // "github.com/sirupsen/logrus"
- // )
- // type DoubleFileLogger struct {
- // infoLogger *logrus.Logger
- // errorLogger *logrus.Logger
- // channel chan *logrus.Entry
- // wg sync.WaitGroup
- // }
- // func NewDoubleFileLogger(fileName string, logLevel logrus.Level) (Logger, error) {
- // initLog := func(fileName2 string, logLevel logrus.Level, rotationTime time.Duration) (*logrus.Logger, error) {
- // // 初始化rotatelogs
- // writer, err := rotatelogs.New(
- // fileName2+".%Y%m%d%H.log",
- // rotatelogs.WithLinkName(fileName2),
- // // WithMaxAge和WithRotationCount只能选其一
- // rotatelogs.WithRotationCount(7),
- // rotatelogs.WithRotationTime(rotationTime),
- // )
- // if err != nil {
- // return nil, err
- // }
- // // 设置lfshook
- // writeMap := lfshook.WriterMap{
- // logrus.DebugLevel: writer,
- // logrus.InfoLevel: writer,
- // logrus.WarnLevel: writer,
- // logrus.ErrorLevel: writer,
- // logrus.FatalLevel: writer,
- // logrus.PanicLevel: writer,
- // }
- // hook := lfshook.NewHook(writeMap, &logrus.TextFormatter{
- // TimestampFormat: "2006-01-02 15:04:05",
- // })
- // // 初始化logrus并添加hook
- // logger := logrus.New()
- // logger.SetLevel(logrus.Level(logLevel))
- // logger.Hooks.Add(hook)
- // // 屏蔽logrus的日志输出,只使用HOOKS
- // logger.SetFormatter(&NilFormatter{})
- // logger.SetOutput(&NilWriter{})
- // return logger, nil
- // }
- // log1, err1 := initLog(fileName, logLevel, time.Hour*24)
- // log2, err2 := initLog(fileName+".error", ErrorLevel, time.Hour*24*10)
- // if err1 != nil {
- // return nil, err1
- // }
- // if err2 != nil {
- // return nil, err2
- // }
- // channel := make(chan *logrus.Entry, 100) // 有缓冲的通道,防止阻塞
- // log3 := &DoubleFileLogger{
- // infoLogger: log1,
- // errorLogger: log2,
- // channel: channel,
- // }
- // log3.wg.Add(1)
- // go log3.startWorker()
- // return log3, nil
- // }
- // func (dfl *DoubleFileLogger) startWorker() {
- // defer dfl.wg.Done()
- // for entry := range dfl.channel {
- // entry.Log(entry.Level, entry.Message)
- // }
- // // dfl.infoLogger.Info("log worker exit")
- // }
- // func (dfl *DoubleFileLogger) Close() {
- // close(dfl.channel)
- // dfl.wg.Wait()
- // }
- // func (dfl *DoubleFileLogger) Log(level Level, msg string) {
- // if dfl.infoLogger.IsLevelEnabled(logrus.Level(level)) {
- // entry := logrus.NewEntry(dfl.infoLogger)
- // entry.Level = logrus.Level(level)
- // entry.Message = msg
- // dfl.channel <- entry
- // }
- // if dfl.errorLogger.IsLevelEnabled(logrus.Level(level)) {
- // dfl.errorLogger.Log(logrus.Level(level), msg)
- // }
- // }
- // func (dfl *DoubleFileLogger) Logf(level Level, format string, args ...interface{}) {
- // if dfl.infoLogger.IsLevelEnabled(logrus.Level(level)) {
- // entry := logrus.NewEntry(dfl.infoLogger)
- // entry.Level = logrus.Level(level)
- // entry.Message = fmt.Sprintf(format, args...)
- // dfl.channel <- entry
- // }
- // if dfl.errorLogger.IsLevelEnabled(logrus.Level(level)) {
- // dfl.errorLogger.Logf(logrus.Level(level), format, args...)
- // }
- // }
- // func sprintlnn(args ...interface{}) string {
- // msg := fmt.Sprintln(args...)
- // return msg[:len(msg)-1]
- // }
- // func (dfl *DoubleFileLogger) Logln(level Level, args ...interface{}) {
- // if dfl.infoLogger.IsLevelEnabled(logrus.Level(level)) {
- // entry := logrus.NewEntry(dfl.infoLogger)
- // entry.Level = logrus.Level(level)
- // entry.Message = sprintlnn(args...)
- // dfl.channel <- entry
- // }
- // if dfl.errorLogger.IsLevelEnabled(logrus.Level(level)) {
- // dfl.errorLogger.Logln(logrus.Level(level), args...)
- // }
- // }
- // func (dfl *DoubleFileLogger) Info(msg string) {
- // dfl.Log(InfoLevel, msg)
- // }
- // func (dfl *DoubleFileLogger) Infof(format string, args ...interface{}) {
- // dfl.Logf(InfoLevel, format, args...)
- // }
- // func (dfl *DoubleFileLogger) Infoln(args ...interface{}) {
- // dfl.Logln(InfoLevel, args...)
- // }
- // func (dfl *DoubleFileLogger) Warn(msg string) {
- // dfl.Log(WarnLevel, msg)
- // }
- // func (dfl *DoubleFileLogger) Warnf(format string, args ...interface{}) {
- // dfl.Logf(WarnLevel, format, args...)
- // }
- // func (dfl *DoubleFileLogger) Warnln(args ...interface{}) {
- // dfl.Logln(WarnLevel, args...)
- // }
- // func (dfl *DoubleFileLogger) Error(msg string) {
- // dfl.Log(ErrorLevel, msg)
- // }
- // func (dfl *DoubleFileLogger) Errorf(format string, args ...interface{}) {
- // dfl.Logf(ErrorLevel, format, args...)
- // }
- // func (dfl *DoubleFileLogger) Errorln(args ...interface{}) {
- // dfl.Logln(ErrorLevel, args...)
- // }
- // func (dfl *DoubleFileLogger) Debug(msg string) {
- // dfl.Log(DebugLevel, msg)
- // }
- // func (dfl *DoubleFileLogger) Debugf(format string, args ...interface{}) {
- // dfl.Logf(DebugLevel, format, args...)
- // }
- // func (dfl *DoubleFileLogger) Debugln(args ...interface{}) {
- // dfl.Logln(DebugLevel, args...)
- // }
- // func (dfl *DoubleFileLogger) Fatal(msg string) {
- // dfl.Log(FatalLevel, msg)
- // }
- // func (dfl *DoubleFileLogger) Fatalf(format string, args ...interface{}) {
- // dfl.Logf(FatalLevel, format, args...)
- // }
- // func (dfl *DoubleFileLogger) Fatalln(args ...interface{}) {
- // dfl.Logln(FatalLevel, args...)
- // }
- // func (dfl *DoubleFileLogger) Panic(msg string) {
- // dfl.Log(PanicLevel, msg)
- // }
- // func (dfl *DoubleFileLogger) Panicf(format string, args ...interface{}) {
- // dfl.Logf(PanicLevel, format, args...)
- // }
- // func (dfl *DoubleFileLogger) Panicln(args ...interface{}) {
- // dfl.Logln(PanicLevel, args...)
- // }
- // type NilFormatter struct {
- // }
- // func (nf *NilFormatter) Format(*logrus.Entry) ([]byte, error) {
- // return nil, nil
- // }
- // type NilWriter struct {
- // }
- // func (nf *NilWriter) Write(p []byte) (n int, err error) {
- // return 0, nil
- // }
- // func testDoubleFileLogger() {
- // logger, err := NewDoubleFileLogger("./logs/test.log", InfoLevel)
- // if err != nil {
- // panic(err)
- // }
- // // 记录日志
- // logger.Debug("这是一条调试日志,使用lfshook")
- // logger.Info("这是一条信息日志,使用lfshook")
- // // ... 其他日志
- // }
|