goKit微服务系列文章二:增加log中间件

再系列文章一的基础上 增加 loggings.go文件

/*
@Time : 2020/6/22 14:04
@Author : zhb
@File : loggings
@Software: GoLand
*/
package main

import (
	"github.com/go-kit/kit/log"
	"time"
)

type loggingMiddleware struct {
    
    
	Server
	logger log.Logger
}

//日志功能的中间件结构体
func LoggingMiddleware(logger log.Logger) ServerMiddleware {
    
    
	return func(next Server) Server {
    
    
		return loggingMiddleware{
    
    next, logger}
	}
}

//重新实现add方法
func (mw loggingMiddleware) Add(a, b int) (ret int) {
    
    

	defer func(beign time.Time) {
    
    
		mw.logger.Log(
			"function", "Add",
			"a", a,
			"b", b,
			"result", ret,
			"took", time.Since(beign),
		)
	}(time.Now())

	ret = mw.Server.Add(a, b)
	return ret
}

func (mw loggingMiddleware) Sub(a, b int) (ret int) {
    
    

	defer func(beign time.Time) {
    
    
		mw.logger.Log(
			"function", "Sub",
			"a", a,
			"b", b,
			"result", ret,
			"took", time.Since(beign),
		)
	}(time.Now())

	ret = mw.Server.Sub(a, b)
	return ret
}

func (mw loggingMiddleware) Mul(a, b int) (ret int) {
    
    

	defer func(beign time.Time) {
    
    
		mw.logger.Log(
			"function", "Mul",
			"a", a,
			"b", b,
			"result", ret,
			"took", time.Since(beign),
		)
	}(time.Now())

	ret = mw.Server.Mul(a, b)
	return ret
}

func (mw loggingMiddleware) Div(a, b int) (ret int, err error) {
    
    

	defer func(beign time.Time) {
    
    
		mw.logger.Log(
			"function", "Div",
			"a", a,
			"b", b,
			"result", ret,
			"took", time.Since(beign),
		)
	}(time.Now())

	ret, _ = mw.Server.Div(a, b)
	return ret, nil
}

重写main.go文件

/*
@Time : 2020/6/20 11:27
@Author : zhb
@File : main
@Software: GoLand
*/
package main

import (
	"context"
	"fmt"
	"github.com/go-kit/kit/log"
	"net/http"
	"os"
	"os/signal"
	"syscall"
)

func main() {
    
    

	ctx := context.Background()
	errChan := make(chan error)

	var svc Server
	svc = ArithmeticService{
    
    }
	var logger log.Logger
	{
    
    
		logger = log.NewLogfmtLogger(os.Stderr)
		logger = log.With(logger, "ts", log.DefaultTimestampUTC)
		logger = log.With(logger, "caller", log.DefaultCaller)
	}
	// 增加logger的中间件
	svc = LoggingMiddleware(logger)(svc)
	endpoint := MakeArithmeticEndpoint(svc)

	r := MakeHttpHandler(ctx, endpoint, logger)

	go func() {
    
    
		fmt.Println("Http Server start at port:9000")
		errChan <- http.ListenAndServe(":9000", r)
	}()

	go func() {
    
    
		c := make(chan os.Signal, 1)
		signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
		errChan <- fmt.Errorf("%s", <-c)
	}()

	fmt.Println(<-errChan)
}

运行结果
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39998006/article/details/106902985