7

次のログ構造があります。

[STDERR] 2018-07-09 11:06:16.003    INFO    some_pkg/main.go:232    Logging message 1   {"pid": 8842, "process": "some_process"}
[STDERR] 2018-07-09 11:06:16.006    DEBUG   some_pkg/main.go:291    Logging message 2   {"pid": 8842, "process": "other_process"}
[STDERR] 2018-07-09 11:06:16.009    INFO    some_pkg/main.go:345    Logging message 3   {"pid": 8842, "process": "some_process"}

このロギング スニペットには、5 種類の情報があることがわかります。日付/時刻、ログレベル、発生、メッセージ、および JSON フィールド ([STDERR] フィールドを除く) があります。つまり、ログ構造には 5 つの列があります。キーpidプロセス(JSON から)を含む新しい列を追加したいと思います。ZAP エンコーダーと構成でこれを行うにはどうすればよいですか? ZAP のドキュメントにはその解決策が見つかりませんでした。

次のコードを使用して、ログにフィールドを追加します。

logger = logger.With(zap.Field{Key: "pid", Type: zapcore.Int64Type, Integer: int64(os.Getpid())})

しかし、pid フィールドの値は JSON (上に表示されているもの) になり、新しい列に表示したいと思います。ZAP でこれを行う簡単な方法はありますか?

私の望ましい構造は、前の例では次のようになります。

[STDERR] 2018-07-09 11:06:16.003    INFO    some_pkg/main.go:232    Logging message 1   8842    some_process
[STDERR] 2018-07-09 11:06:16.006    DEBUG   some_pkg/main.go:291    Logging message 2   8836    other_process
[STDERR] 2018-07-09 11:06:16.009    INFO    some_pkg/main.go:345    Logging message 3   8842    some_process
4

2 に答える 2

1

要求されたログ スタイルでは、構造化ログ (json) と非構造化ログ (コンソールの他のすべてのフィールド) が混在します。

blackgreenの答えはそれを可能にするはずであり、それは良いハックですが、ここでのより大きな問題は、あなたがzapが提供しなければならないものに反対していることだと思います(Goでの超高速、構造化、レベル化されたロギング)。

推奨されるアプローチは、すべてをjsonに入れ、使用しているログビューアでjsonキーを解析することです。結果のログ構造は次のようになります。

{"timeStamp": "2018-07-09 11:06:16.003", "level": "INFO", "source": "some_pkg/main.go:232", "msg": "Logging message 1", "pid": 8842, "process": "some_process"}
于 2021-10-05T15:37:02.573 に答える