2017-02-02 16 views
1

私のコードのログファイルを作成しようとしています。しかし、すべてのログステートメントをファイルに書き込むことができません。すべてのログステートメントをファイルに書き込めません

func MyLogger() { 
    f, err := os.OpenFile("C:\\Project\\GoLang\\src\\Logs\\LogOutput\\TestLog.log", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666) 
    if err != nil { 
     log.Fatalf("error opening file: %v", err) 
    } 
    defer f.Close() 
    log.SetOutput(f) 
    log.Println("This is a test log entry") 
} 

答えて

4

問題は、あなたがそれを開いた後、すぐにログファイルをクローズしているということです。

は、ここに私のコードです。

log.SetOutput(logFile)に電話していますが、defer logFile.Close()も電話しています。遅延は、関数MyLogger()が終了するとすぐに実行されます。実際に何かを記録する前に実行してください。

ロガーがプログラムの全期間実行されている場合は、プログラムを終了する必要はありません。プログラムが終了すると自動的に閉じられます。

プログラムを終了する前にプログラムを終了する必要がある場合は、そのファイルハンドルをMyLogger()メソッドの外に保存する方法を考え出す必要があります(他のオプションもありますが適切な時間に閉じます。

完全な例:

package Controllers 

import (
    "log" 
    "os" 
    "io" 
) 

var logCloser io.Closer 

func MyLogger() { 
    logFile, err := os.OpenFile("C:/Project/GoLang/src/Logs/log.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666) 
    if err != nil { 
     panic(err) 
    } 
    logCloser = logFile 
    log.SetOutput(logFile) 
} 

func CloseMyLogger() { 
    logCloser.Close() 
} 
関連する問題