2

log4goパッケージのログがときどき失われることがわかりました。

以下は簡単なコード スニペットです (log4goディレクトリを移動したので、次のインポートは問題ありません)。

package main
import (
    "log4go"
    "log"
    "fmt"
)

func main() {
    fmt.Println("fmt")
    log.Println("log")
    log4go.Info("log4go")
    log4go.Info("log4go")
}

次にgo run test.go、 で実行しました。出力は次のとおりです。

fmt
2013/01/10 15:24:04 log

によるメッセージlog4goは出力に書き込まれません。

なんで?

4

4 に答える 4

3

編集:彼らのスタートページはもう最新ではないようです、実際、私はlog4goをstdoutに印刷するのに問題がありました、バージョン3.0.1のドキュメントで彼らは次のように述べています:

  • 使用上の注意:-ConsoleLogWriterはメッセージのソースを標準出力に表示しませんが、FileLogWriterは表示します。

それは私の箱では再現できませんでした。stdoutに出力する唯一の方法は、呼び出しをログに記録した後にos.Stdout.Sync()を呼び出して、手動でフラッシュすることでした(@jnmlが提案したように)。

一般的に私の印象では、log4goのドキュメントは最近維持されておらず、例は機能しておらず、非推奨のメソッドを使用しているため、一般的な動作を理解するのは困難です。

于 2013-01-10T11:49:57.580 に答える
2

log4goウェブサイトで問題を確認したところlog4go、フラッシュに問題があるようです。

を使用しchannelてファイルに書き込むため、main終了が速すぎると、ログの内容が書き込まれません。

time.Sleep(time.Second)そのため、コード スニピートの最後にa を追加すると、ログ コンテンツがフラッシュされます。

于 2013-01-12T00:08:15.590 に答える
1

少なくとも「log4go」へのリンクを提供しなければ、この質問に答えるのは簡単ではないので(したがって、-1)、推測させてください。どこかに「フラッシュ」の呼び出しがない可能性があります。おそらく、パッケージの作成者に問題を報告したほうがよいでしょうか?

ところで:標準/推奨のGo設定を考慮すると、インポートパス「log4go」も壊れています。

于 2013-01-10T07:32:32.990 に答える
0

以下のように、単純に Close() にいくつかのコードを追加します。

for i := 10; i > 0 && len(w.rec) > 0; i-- {
    time.Sleep(100 * time.Millisecond)
}

w.rec に保存されないものがあります。

https://github.com/ccpaging/log4go

于 2015-01-06T13:16:35.503 に答える