[解決済み] ログをファイルに書き出す方法
2022-08-23 07:51:15
質問
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")
}
func FileExists(name string) bool {
if _, err := os.Stat(name); err != nil {
if os.IsNotExist(err) {
return false
}
}
return true
}
func CreateFile(name string) error {
fo, err := os.Create(name)
if err != nil {
return err
}
defer func() {
fo.Close()
}()
return nil
}
ログファイルは作成されますが、何も出力されず、追加もされません。なぜでしょうか?
どうすれば解決できますか?
os.Open()
は、過去に別の方法で動作したことがあるはずですが、これは私のために動作します。
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()
は動作しません。
log.SetOutput
では動作しません。なぜなら、ファイルを "for reading:" で開いてしまうからです。
func Open
func Open(name string) (file *File, err error)
Open
は,指定された ファイルを読み込む。成功した場合、返されたファイルのメソッドは読み込みに使用できます。 関連するファイルディスクリプタは、モードO_RDONLY
. もし エラーが発生した場合、そのエラーは*PathError
.
EDIT
移動した
defer f.Close()
の後に
if err != nil
チェック
関連
-
[解決済み】Pythonのロガーがログファイルに加えて標準出力にも全メッセージを出力するようにする。
-
[解決済み] ファイルを grep して、その周辺の行をいくつか表示する?
-
[解決済み] svn log -v' のように 'git log' にファイル名を表示させる方法
-
[解決済み] Goでマップにキーが含まれているかどうかを確認するには?
-
[解決済み] Goで複数行の文字列はどのように書くのですか?
-
[解決済み] 異なるログレベルを使用する場合
-
[解決済み] PostgreSQLのクエリを記録する方法は?
-
[解決済み】Pythonのエラーをデバッグ情報とともにログに記録する方法は?
-
[解決済み] interface{}をint型に変換する
-
[解決済み] Goプログラムで静的リソースをバンドルする最良の方法は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] time.Sleepを使わずにすべてのゴルーチンが終了するのを待つには?
-
[解決済み] intをint64に変換するには?
-
[解決済み] ゴルーチンの停止方法
-
[解決済み] オブジェクトのプロパティを二重引用符で囲んで使用するには?
-
[解決済み] GolangでMkdirを使ってネストされたディレクトリを作成するには?
-
[解決済み] interface{}をint型に変換する
-
[解決済み] 単一値コンテキストにおける複数値
-
[解決済み] reflectを使用して、構造体フィールドの値を設定するにはどうすればよいですか?
-
[解決済み] Goプログラムで静的リソースをバンドルする最良の方法は何ですか?
-
[解決済み] マップから構造体への変換