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