Http gorilla处理程序写入文件

Http gorilla处理程序写入文件,http,go,Http,Go,文件已创建,但每次请求时都不会写入任何内容 更新 当输出写入os.Stdout import ( "github.com/gorilla/handlers" ) func main(){ ... err := http.ListenAndServe(":9000", access_log(r)) if err != nil { log.Fatal("HTTP server: ", err) } } func access_log(r

文件已创建,但每次请求时都不会写入任何内容

更新 当输出写入
os.Stdout

import (
    "github.com/gorilla/handlers"
)

func main(){
    ...

    err := http.ListenAndServe(":9000", access_log(r))
    if err != nil {
        log.Fatal("HTTP server: ", err)
    }
}

func access_log(r http.Handler) http.Handler {
    f, err := os.OpenFile("log/access.log", os.O_CREATE | os.O_WRONLY | os.O_APPEND, 0666)
    if err != nil {
        log.Panic("Access log: ", err)
    }

    return handlers.LoggingHandler(io.Writer(f), r)
}
更新二
尝试从工作示例开始,如“”中所述:

handlers.LoggingHandler()
直接使用文件,而不是
io.Writer(f)

就你而言:

package main

import (
  "github.com/gorilla/handlers"
  "net/http"
  "os"
)

func main() {
  finalHandler := http.HandlerFunc(final)

  logFile, err := os.OpenFile("server.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
  if err != nil {
    panic(err)
  }

  http.Handle("/", handlers.LoggingHandler(logFile, finalHandler))
  http.ListenAndServe(":3000", nil)
}

func final(w http.ResponseWriter, r *http.Request) {
  w.Write([]byte("OK"))
}

@clarkk上面的例子应该说明,当调用handlers.LoggingHandler()时,应该直接使用
f
,而不是
io.Writer(f)
,serverlog.log的文件大小为144字节,但打开时为空。。(windows>记事本)@clarkk您是否使用了
返回处理程序.LoggingHandler(f,r)
?@clarkk您是否可以尝试使用记事本++而不是记事本?@clarkk您是否使用了类似于
http.Handle(“/”,handlers.LoggingHandler(f,finalHandler))http.ListenAndServe(“:9000”,nil)
func main(){
    runtime.GOMAXPROCS(runtime.NumCPU())

    r := mux.NewRouter()

    www := r.Host("secure.domain.com").Subrouter()
    www.HandleFunc("/", Handler_www)

    api := r.Host("api.domain.com").Subrouter()
    api.HandleFunc("/", Handler_api)

    err := http.ListenAndServe(":9000", access_log(r))
    if err != nil {
        log.Fatal("HTTP server: ", err)
    }
}

func access_log(r http.Handler) http.Handler {
    f, err := os.OpenFile("log/access.log", os.O_CREATE | os.O_WRONLY | os.O_APPEND, 0666)
    if err != nil {
        log.Panic("Access log: ", err)
    }

    return handlers.LoggingHandler(f, r)
}
package main

import (
  "github.com/gorilla/handlers"
  "net/http"
  "os"
)

func main() {
  finalHandler := http.HandlerFunc(final)

  logFile, err := os.OpenFile("server.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
  if err != nil {
    panic(err)
  }

  http.Handle("/", handlers.LoggingHandler(logFile, finalHandler))
  http.ListenAndServe(":3000", nil)
}

func final(w http.ResponseWriter, r *http.Request) {
  w.Write([]byte("OK"))
}
return handlers.LoggingHandler(f, r)