Golang-日志中间件

restful服务中,通常需要将请求信息记录到日志中。以下例子中展示了go如何实现一个简单的日志中间件。

它的基本原理是将业务函数(本例 foo/bar)作为参数传递给日志函数(本例 logging)中,然后将日志函数作为参数交给http.HandleFunc即可。

package main

import (
    "fmt"
    "log"
    "net/http"
)

func logging(f http.HandlerFunc) http.HandlerFunc {
    
    
    return func(w http.ResponseWriter, r *http.Request) {
    
    
        log.Println(r.URL.Path)
        f(w, r)
    }
}

func foo(w http.ResponseWriter, r *http.Request) {
    
    
    fmt.Fprintln(w, "foo")
}

func bar(w http.ResponseWriter, r *http.Request) {
    
    
    fmt.Fprintln(w, "bar")
}

func main() {
    
    
    http.HandleFunc("/foo", logging(foo))
    http.HandleFunc("/bar", logging(bar))

    http.ListenAndServe(":8080", nil)
}

每次访问http://localhost:8080/foo或者http://localhost:8080/bar,后台都会记录请求的地址

2021/02/28 23:56:41 /bar
2021/02/28 23:56:48 /foo

猜你喜欢

转载自blog.csdn.net/mryang125/article/details/114242438