为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
一只斗牛犬 2021-05-09 12:49:10
我正在尝试记录请求者的IP地址,他们正在使用什么方法以及他们正在请求什么文件。但是由于某种原因,它仅在终端上输出,而没有将其保存到logfile.txt ...package mainimport (  "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)  }}
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

在您的Log函数中,您正在使用fmt.Printfnot fmt.Fprintf。


例如,


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

}


查看完整回答
反对 回复 2021-05-17
  • 1 回答
  • 0 关注
  • 245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信