使用Go语言简单HTTP服务器打印到日志

使用Go语言简单HTTP服务器打印到日志,go,Go,我试图记录请求者的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 {

我试图记录请求者的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)
  }
}

Log
函数中,您正在使用not

比如说,

package main

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

var logFile *os.File

func 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()
}

我添加了FprintF(w…但我如何将其导入logs.txt之类的文件?(谢谢您的帮助,顺便说一句)查看我的修订答案以获得解决方案的概要。您的原样脚本(登录到控制台)正是我所需要的。