1、通过log模块记录http请求的信息,需要在每个http函数中加入该函数
func accesslog(ip,method,url,userAgent string,status int){
log.Printf("%s %s %s",ip,method,url)
}
func GetUsers(w http.ResponseWriter,r *http.Request){
tpl :=template.Must(template.ParseFiles("template/user.html"))
tmp.ExecuteTemplate(w,"user.html",services.GetUsers())
accessLog(r.RemoteAddr,r.Method,r.URL.String(),r.Header.Get("UserAgent"))
}
2、通过Wrapper函数套用http函数,记录日志
func accesslog(ip,method,url,userAgent string,status int){
log.Printf("%s %s %s",ip,method,url)
}
func GetUsers(w http.ResponseWriter,r *http.Request){
tpl :=template.Must(template.ParseFiles("template/user.html"))
tmp.ExecuteTemplate(w,"user.html",services.GetUsers())
}
func GetUsersWrapper(w http.ResponseWriter,r *http.Request){
GetUser(w,r)
accessLog(r.RemoteAddr,r.Method,r.URL.String(),r.Header.Get("UserAgent"))
}
func Register(){
//绑定GetUsersWrapper 函数
http.HandleFunc("/",controllers.GetUsersWrapper)
}
3、通过闭包生成函数的方式,记录日志
func accesslog(ip,method,url,userAgent string,status int){
}
var logger *log.Logger
// logger需要初始化
func InitLogger(writer log.Writer){
logger =log.New(writer,"",0)
}
//工厂函数
func LoggerWrapper(action http.HandlerFunc) http.HandlerFunc{
return func(w http.ResponseWriter,r *http.Request){
action(w,r)
//logger未初始化,就不记录日志
if logger !=nil{
logger.Printf("%s %s %s",ip,method,url)
}
}
}
var GetUserWrapper2 = LoggerWrapper(GetUsers)
func Register(){
//绑定GetUsersWrapper2 函数,或套用LoggerWrapper函数
http.HandleFunc("/",controllers.GetUsersWrapper)
//或
// http.HandleFunc("/",LoggerWrapper(GetUsers))
}
文档更新时间: 2023-04-13 13:15 作者:张尚