Go でログをファイルに書き込む方法
Go を使用してログ ファイルに書き込もうとすると、いくつかのエラーが発生する可能性があります。ログ ファイルを作成したにもかかわらず、試行した方法ではログの印刷やログの追加に失敗する場合があります。提供されているコードは、これらの試みを示しています。
func TestLogging(t *testing.T) { if !FileExists("logfile") { CreateFile("logfile") } f, err := os.Open("logfile") if err != nil { t.Fatalf("error: %v", err) } // attempt #1 log.SetOutput(io.MultiWriter(os.Stderr, f)) log.Println("hello, logfile") // attempt #2 log.SetOutput(io.Writer(f)) log.Println("hello, logfile") // attempt #3 log.SetOutput(f) log.Println("hello, logfile") }
この問題を解決するには、コードで os.Open の代わりに os.OpenFile を使用する必要があります。正しいアプローチは次のとおりです。
f, err := os.OpenFile("testlogfile", 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")
Go ドキュメントによると、os.Open はファイルの読み取りを目的としており、ログ出力の設定には適していません。一方、os.OpenFile を使用すると、ファイルを読み取りと書き込みの両方で開くことができます。 os.O_APPEND を設定すると、ログ エントリは既存のコンテンツを上書きするのではなく、ファイルの末尾に追加されます。
以上がGo コードがファイルへのログの書き込みに失敗するのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。