ホームページ >バックエンド開発 >Golang >Go コードがファイルへのログの書き込みに失敗するのはなぜですか?それを修正するにはどうすればよいですか?

Go コードがファイルへのログの書き込みに失敗するのはなぜですか?それを修正するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-16 06:34:18858ブラウズ

Why Does My Go Code Fail to Write Logs to a File, and How Can I Fix It?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。