2012-10-11 13 views
7

İstekte bulunulan kişinin IP adresini, hangi YÖNü kullandığını ve hangi dosyayı istediklerini günlüğe kaydetmeye çalışıyorum. Ama nedense sadece sen fmt.Printf değil fmt.Fprintf kullanıyor, terminalde çıkışı ve logfile.txt için kaydetmez ... senin Log fonksiyonundaGit Dili Basit Günlüğü Kullanarak Yazdırmak için HTTP Sunucusu

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) 
    } 
} 
+2

Senaryonuz (konsoluna giriş) gibi-ı sadece ne ihtiyaç vardır. –

cevap

7

. Örneğin

,

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() 
} 
+0

FprintF ekledim (w ... ama bunu logs.txt gibi bir dosyaya nasıl yönlendirebilirim? (Yardım btw için teşekkürler.) –

+0

Çözümün ana hatları için gözden geçirilmiş cevabımı görün. – peterSO

İlgili konular