使用Go Language Simple HTTP Server打印到日志

我正在尝试记录请求者的IP地址,他们正在使用什么方法以及他们正在请求什么文件。但是由于某种原因,它仅在终端上输出,而没有将其保存到logfile.txt ...


package main


import (

  "fmt"

  "net/http"

  "log"

  "encoding/json"

  "io/ioutil"

)


type Options struct {

  Path string

  Port string

}


func Log(handler http.Handler) http.Handler {

  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

    fmt.Printf("%s %s %s\n", r.RemoteAddr, r.Method, r.URL)

    handler.ServeHTTP(w, r)

  })

}


func main() {


  op := &Options{Path: "./", Port: "8001"}


  data, _ := ioutil.ReadFile("./config.json")


  json.Unmarshal(data, op)


  http.Handle("/", http.FileServer(http.Dir(op.Path)))

  err := http.ListenAndServe(":" + op.Port, Log(http.DefaultServeMux))

  if err != nil {

    log.Fatal("ListenAndServe: ", err)

  }

}


一只斗牛犬
浏览 247回答 1
1回答

拉丁的传说

在您的Log函数中,您正在使用fmt.Printfnot fmt.Fprintf。例如,package mainimport (    "fmt"    "log"    "net/http"    "os")var logFile *os.Filefunc Log(handler http.Handler) http.Handler {    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {        fmt.Fprintf(logFile, "%s %s %s\n", r.RemoteAddr, r.Method, r.URL)        handler.ServeHTTP(w, r)    })}func main() {    var err error    logFile, err = os.Create("logfile.txt")    if err != nil {        log.Fatal("Log file create:", err)        return    }    defer logFile.Close()}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go