logger.go 2.78 KB
package utils

import (
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	lumberjack "gopkg.in/natefinch/lumberjack.v2"
	"net/http"
	"os"
)

var Sugar *zap.SugaredLogger
var Logger *zap.Logger

func InitLogger(conf *lumberjack.Logger) {
	writeSyncer := zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(conf)) //控制台和日志同时输出
	encoder := getEncoder()
	core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)

	Logger = zap.New(core, zap.AddCaller())
	Sugar = Logger.Sugar()
}

func getEncoder() zapcore.Encoder {
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
	encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
	return zapcore.NewConsoleEncoder(encoderConfig)
}

func simpleHttpGet(url string) {
	Sugar.Debugf("Trying to hit GET request for %s", url)
	resp, err := http.Get(url)
	if err != nil {
		Sugar.Errorf("Error fetching URL %s : Error = %s", url, err)
	} else {
		Sugar.Infof("Success! statusCode = %s for URL %s", resp.Status, url)
		resp.Body.Close()
	}
}

func LogTest() {
	lumberJackLogger := &lumberjack.Logger{
		Filename:   "./pro2d.log",		// ⽇志⽂件路径
		MaxSize:    1024,				// 1M=1024KB=1024000byte
		MaxBackups: 5,					// 最多保留5个备份
		MaxAge:     30,					// days
		Compress:   true,				// 是否压缩 disabled by default
	}

	InitLogger(lumberJackLogger)
	defer Logger.Sync()
	for i:=0; i < 10000;i++ {
		simpleHttpGet("www.baidu.com")
		simpleHttpGet("http://www.baidu.com")
	}
}

//--使用sink 结合es使用
//func registerSinkDemo() {
//	zap.RegisterSink("mq", mq.NewMqSink)
//	writer, close, err := zap.Open("mq://192.168.99.100:9876/log")
//	if err != nil {
//		panic(err)
//	}
//	defer close()
//	logger := zap.New(zapcore.NewCore(zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), writer, zap.DebugLevel)).Sugar()
//	logger.Info("hello")
//}
//
//type MqWriteSyncer struct {
//	topic    string
//	producer rocketmq.Producer
//	ctx      context.Context
//}
//
//func (m *MqWriteSyncer) Close() error {
//	return m.producer.Shutdown()
//}
//
//func (m *MqWriteSyncer) Write(p []byte) (n int, err error) {
//	msg := &primitive.Message{
//		Topic: m.topic,
//		Body:  p,
//	}
//	err = m.producer.SendOneWay(m.ctx, msg)
//	return len(p), err
//}
//
//func (m *MqWriteSyncer) Sync() error {
//	return nil
//}
//
//func NewMqSink(url *url.URL) (zap.Sink, error) {
//	broker := fmt.Sprintf("%s:%s", url.Hostname(), url.Port())
//	topic := url.Path[1:len(url.Path)]
//	p, _ := rocketmq.NewProducer(
//		producer.WithNameServer([]string{broker}),
//		producer.WithRetry(2),
//	)
//	err := p.Start()
//	if err != nil {
//		fmt.Printf("start producer error: %s", err.Error())
//		return nil, err
//	}
//
//	return &MqWriteSyncer{producer: p, ctx: context.Background(), topic: topic}, nil
//}