74

golang でレベルベースのロギングに使用できる適切なラッパーはありますか? そうでない場合、自分で実装するにはどうすればよいですか?

私が欲しいものはとてもシンプルです。私はいくつかの機能が欲しい

log.Error()
log.Info()

出力を stdout に表示し、これらをログ ファイルに保存します (コマンドライン引数としてプログラムに指定されたレベルに基づきます)。このラッパーを実装するにはどうすればよいですか?

4

10 に答える 10

65

既存の回答がかなり古いため、いくつかの提案があります。

于 2015-06-26T15:17:01.493 に答える
6
  • Uber-go/Zap : Go での高速で構造化された平準化されたロギング
  • Logrus : Go 用の構造化されたプラグ可能なログ。(JSON およびテキスト形式)

どちらのライブラリにもレベル フックがあり、これは非常に興味深い機能です。フックは、特定のログ レベルに登録できます。たとえば、エラー(を使用してログに記録log.Error())が発生した場合は、監視ツールなどに報告できます。

于 2016-11-07T14:03:30.493 に答える
4

seelogはあなたの要件に合っていると思います。ログ ディスカッションで頻繁に出てくるので、かなり人気があるようです。真剣に使ったことがないので、それ以上のコメントはできません。

于 2013-06-03T12:41:07.993 に答える
4

http://cgl.tideland.bizを見て、パッケージ「applog」を見てください。そのように機能しています。

PS: 現在、CGL 全体が作り直されており、まもなく新しい機能がリリースされますが、別の名前でリリースされます。;)

于 2013-06-03T11:48:25.370 に答える
2

stdlogは、要件に正確に適合します。

log := stdlog.GetFromFlags()
log.Info("Connecting to the server...")
log.Errorf("Connection failed: %q", err)
于 2014-04-19T16:08:22.240 に答える
0

検討できるロギング モジュールの 1 つは klog です。特定のレベルでログを記録する柔軟性を提供する「V」ログをサポートします

klog は glog のフォークであり、以下の欠点を克服しています

glog には多くの「落とし穴」があり、コンテナー化された環境に課題をもたらしますが、これらはすべて十分に文書化されていません。glog はログをテストする簡単な方法を提供していないため、それを使用するソフトウェアの安定性が損なわれます glog は C++ ベースであり、klog は純粋な golang 実装です

サンプル実装

package main

import (
    "flag"

    "k8s.io/klog"


)

type myError struct {
    str string
}

func (e myError) Error() string {
    return e.str
}

func main() {
    klog.InitFlags(nil)
    flag.Set("v", "1")
    flag.Parse()

    klog.Info("hello", "val1", 1, "val2", map[string]int{"k": 1})
    klog.V(3).Info("nice to meet you")
    klog.Error(nil, "uh oh", "trouble", true, "reasons", []float64{0.1, 0.11, 3.14})
    klog.Error(myError{"an error occurred"}, "goodbye", "code", -1)
    klog.Flush()
}
于 2020-04-05T06:56:15.850 に答える