ホームページ >バックエンド開発 >Golang >Go ログ メッセージがファイルに書き込まれないのはなぜですか?

Go ログ メッセージがファイルに書き込まれないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-10 00:46:11436ブラウズ

Why Aren't My Go Log Messages Writing to the File?

Go でファイルにログ メッセージを書き込む

Go では、ファイルへのログ記録は簡単なタスクです。ただし、特定のアプローチではエラーが発生する可能性があり、ログ メッセージがファイルに書き込まれないのはなぜなのか疑問に思うかもしれません。

失敗したアプローチ

提供されたコードには、3 回の試行が失敗していることが示されています。ファイルへのログ記録時:

func TestLogging(t *testing.T) {
    // ...

    // 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() がファイルを開くため、これらの試みは失敗します。読み取り専用であり、log.SetOutput() で必要な書き込みとは互換性がありません。

解決策

ファイルに正常にログを記録するには、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")

os.OpenFile() は読み取り、書き込み、作成、追加のアクセス許可でファイルを開きます。これにより、ログ メッセージをファイルに正常に書き込むことができます。ロギングが完了したら、defer f.Close().

を使用してファイルを閉じることを忘れないでください。

以上がGo ログ メッセージがファイルに書き込まれないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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