1、通过log模块记录http请求的信息,需要在每个http函数中加入该函数

  1. func accesslog(ip,method,url,userAgent string,status int){
  2. log.Printf("%s %s %s",ip,method,url)
  3. }
  4. func GetUsers(w http.ResponseWriter,r *http.Request){
  5. tpl :=template.Must(template.ParseFiles("template/user.html"))
  6. tmp.ExecuteTemplate(w,"user.html",services.GetUsers())
  7. accessLog(r.RemoteAddr,r.Method,r.URL.String(),r.Header.Get("UserAgent"))
  8. }

2、通过Wrapper函数套用http函数,记录日志

  1. func accesslog(ip,method,url,userAgent string,status int){
  2. log.Printf("%s %s %s",ip,method,url)
  3. }
  4. func GetUsers(w http.ResponseWriter,r *http.Request){
  5. tpl :=template.Must(template.ParseFiles("template/user.html"))
  6. tmp.ExecuteTemplate(w,"user.html",services.GetUsers())
  7. }
  8. func GetUsersWrapper(w http.ResponseWriter,r *http.Request){
  9. GetUser(w,r)
  10. accessLog(r.RemoteAddr,r.Method,r.URL.String(),r.Header.Get("UserAgent"))
  11. }
  12. func Register(){
  13. //绑定GetUsersWrapper 函数
  14. http.HandleFunc("/",controllers.GetUsersWrapper)
  15. }

3、通过闭包生成函数的方式,记录日志

  1. func accesslog(ip,method,url,userAgent string,status int){
  2. }
  3. var logger *log.Logger
  4. // logger需要初始化
  5. func InitLogger(writer log.Writer){
  6. logger =log.New(writer,"",0)
  7. }
  8. //工厂函数
  9. func LoggerWrapper(action http.HandlerFunc) http.HandlerFunc{
  10. return func(w http.ResponseWriter,r *http.Request){
  11. actionw,r)
  12. //logger未初始化,就不记录日志
  13. if logger !=nil{
  14. logger.Printf("%s %s %s",ip,method,url)
  15. }
  16. }
  17. }
  18. var GetUserWrapper2 = LoggerWrapper(GetUsers)
  19. func Register(){
  20. //绑定GetUsersWrapper2 函数,或套用LoggerWrapper函数
  21. http.HandleFunc("/",controllers.GetUsersWrapper)
  22. //或
  23. // http.HandleFunc("/",LoggerWrapper(GetUsers))
  24. }
文档更新时间: 2023-04-13 13:15   作者:张尚