ホームページ > バックエンド開発 > Golang > ZAP:GOのログの可能性を最大限に引き出します

ZAP:GOのログの可能性を最大限に引き出します

DDD
リリース: 2025-01-28 18:03:09
オリジナル
280 人が閲覧しました

言語高性能ライブラリZAP詳細な説明とアプリケーション

この記事では、Uberによって開発された高性能GOログライブラリZAPを調査し、その特性、使用方法、ログファイル部門やレベル出力などの高度なアプリケーションをカバーしています。 Zapは、その速度と構造化されたログ出力で有名です。

githubアドレス:

https://www.php.cn/link/26ac49243aa3065a10ca1796c2d1e57b

Zap: Unlock the Full Potential of Logging in Go creation の例

Zapは、ロガーインスタンスを作成するための3つのメソッドを提供します:

。違いは、情報の詳細を記録し、パラメータータイプが文字列に制限されていることです。 zap.NewProduction() zap.NewDevelopment() zap.Example()

// 代码示例
var log *zap.Logger
log = zap.NewExample()
log, _ := zap.NewDevelopment()
log, _ := zap.NewProduction()
log.Debug("这是一条DEBUG信息")
log.Info("这是一条INFO信息")
ログイン後にコピー
ログイン後にコピー
<code>// Example 输出
{"level":"debug","msg":"这是一条DEBUG信息"}
{"level":"info","msg":"这是一条INFO信息"}</code>
ログイン後にコピー
ログイン後にコピー
3つの作成方法比較:
<code>// Development 输出
2025-01-28T00:00:00.000+0800    DEBUG    development/main.go:7    这是一条DEBUG信息
2025-01-28T00:00:00.000+0800    INFO    development/main.go:8    这是一条INFO信息</code>
ログイン後にコピー
ログイン後にコピー
<code>// Production 输出
{"level":"info","ts":1737907200.0000000,"caller":"production/main.go:8","msg":"这是一条INFO信息"}
{"level":"info","ts":1737907200.0000000,"caller":"production/main.go:9","msg":"这是一条包含字段的INFO信息","region":["us-west"],"id":2}</code>
ログイン後にコピー
ログイン後にコピー

<<>および

json形式の出力を使用して、
    行形式の出力を使用します。
  • Example 開発ProductionDevelopment
  • 追跡のために、警告レベルからスタック情報の印刷を開始します。
  • 常に印刷されたパッケージ/ファイル/行番号(方法)。
      json文字列として追加のフィールドをテールに追加します。
    • 大文字の名前を印刷します。
    • MilliseCond -Level ISO8601形式を使用して、タイムスタンプを印刷します。
    • 生産<
    • デバッグレベルのニュースの記録はありません。
    エラーとパニックレコードの場合、スタック内のファイルは追跡されますが、警告レベルは追跡されません。
  • 常に発信者のファイル情報を追加してください。 タイムスタンプ形式の印刷日。
    • 小文字の名前を印刷します。
    • フォーマット出力
    • zapは、2つのロガータイプを提供します:
    • 。違いは、メインロガーの
    メソッドを呼び出して、それを使用してprintf形式でステートメントを記録できることです。
ファイルを書きます<写>

デフォルトでは、アプリケーションコンソールへのログ出力。問い合わせを容易にするために、ログをファイルに書き込むことができます。この時点で、前述のインスタンスを作成する3つの方法は使用できませんが、

です。

*zap.Logger *zap.SugaredLogger .Sugar()同時に、コンソールとファイルへの出力SugaredLogger

コンソールと同時にファイルに出力する必要がある場合は、
var sugarLogger *zap.SugaredLogger

func InitLogger() {
  logger, _ := zap.NewProduction()
    sugarLogger = logger.Sugar()
}

func main() {
    InitLogger()
    defer sugarLogger.Sync()
    sugarLogger.Errorf("获取URL %s 失败:错误 = %s", url, err)
}
ログイン後にコピー
ログイン後にコピー
を変更する必要があります。次の例:<下>

ファイルセグメンテーション<文>

ログファイルは、時間とともに大きくなり、大きくなります。多数のディスクスペースを占有しないようにするには、特定の条件に応じてログファイルが必要です。 ZAP自体はファイルセグメンテーション機能を提供しませんが、ZAPが推奨するLumberJackパッケージを使用してそれを実現できます。 zap.New()

// 代码示例
var log *zap.Logger
log = zap.NewExample()
log, _ := zap.NewDevelopment()
log, _ := zap.NewProduction()
log.Debug("这是一条DEBUG信息")
log.Info("这是一条INFO信息")
ログイン後にコピー
ログイン後にコピー

レベル

にファイルを書き込みます

マネージャーの問い合わせを容易にするために、エラーレベルの下のログは通常、エラーレベル以降のログがERROR.logファイルに書き込まれます。 <的>メソッドの3番目のパラメーターを変更し、ファイルを情報とエラーに分割するだけです。次の例:<下> zapcore.NewCore

変更後、ログとデバッグレベルのログはinfo.logに保存され、エラーレベルのログはerror.logファイルのみに保存されます。
<code>// Example 输出
{"level":"debug","msg":"这是一条DEBUG信息"}
{"level":"info","msg":"这是一条INFO信息"}</code>
ログイン後にコピー
ログイン後にコピー

コンソールにはレベルの色が表示されます

エンコーダーの

を指​​定するだけです。

EncodeLevel

ファイルパスと行番号を表示
<code>// Development 输出
2025-01-28T00:00:00.000+0800    DEBUG    development/main.go:7    这是一条DEBUG信息
2025-01-28T00:00:00.000+0800    INFO    development/main.go:8    这是一条INFO信息</code>
ログイン後にコピー
ログイン後にコピー
前述のように、

ファイルパスと行番号を表示するには、パラメーターを

メソッドに追加するだけです。完全なパスを表示する場合は、エンコーダー構成で指定する必要があります。

zap.New zap.AddCaller()フルコード<完>

<code>// Production 输出
{"level":"info","ts":1737907200.0000000,"caller":"production/main.go:8","msg":"这是一条INFO信息"}
{"level":"info","ts":1737907200.0000000,"caller":"production/main.go:9","msg":"这是一条包含字段的INFO信息","region":["us-west"],"id":2}</code>
ログイン後にコピー
ログイン後にコピー
Leapcell:最高のGolangアプリケーションのホスティング、非同期タスク、Redisプラットフォーム

var sugarLogger *zap.SugaredLogger

func InitLogger() {
  logger, _ := zap.NewProduction()
    sugarLogger = logger.Sugar()
}

func main() {
    InitLogger()
    defer sugarLogger.Sync()
    sugarLogger.Errorf("获取URL %s 失败:错误 = %s", url, err)
}
ログイン後にコピー
ログイン後にコピー

最後に、Golang Servicesを展開するのに最適なプラットフォームをお勧めします:Leapcell

1。マルチ言語サポートZap: Unlock the Full Potential of Logging in Go

JavaScript、Python、GoまたはRustを使用して開発します。

2。無制限のプロジェクトを無料で展開
  • 使用のために支払うだけです - リクエストなし、費用はかかりません。

3。比類のないコストメリット
  • オンデマンドで支払い、アイドルコストはありません。
たとえば、

:25ドルは694万件のリクエストをサポートし、平均応答時間は60ミリ秒です。

  • 4。簡素化された開発者エクスペリエンス
  • 直感的なUI、簡単な設定。

完全な自動CI/CDパイプラインとGitopsの統合。

    REAL -TIMEインジケーターとログレコードは、操作洞察を提供します。
  • 5。簡単な拡張と高性能
  • 高度と合併を簡単に処理する自動拡張機能。

ゼロ運用費用 - 建設に焦点を合わせます。

  • ドキュメントで詳細をご覧ください!
Leapcell Twitter:

https://www.php.cn/link/7884effb9452a6d7a794999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 Zap: Unlock the Full Potential of Logging in Goこの復活した出力は、元の意味と構造の元の意味と構造を維持します

以上がZAP:GOのログの可能性を最大限に引き出しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート