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 //}