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) }
运行结果
下一篇:
微服务 Consul服务注册与发现