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

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

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

言語高性能ライブラリ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()

<code class="language-go">// 代码示例
var log *zap.Logger
log = zap.NewExample()
log, _ := zap.NewDevelopment()
log, _ := zap.NewProduction()
log.Debug("这是一条DEBUG信息")
log.Info("这是一条INFO信息")</code>
ログイン後にコピー
ログイン後にコピー
<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

    コンソールと同時にファイルに出力する必要がある場合は、
    <code class="language-go">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)
    }</code>
    ログイン後にコピー
    ログイン後にコピー
    を変更する必要があります。次の例:

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

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

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

    レベル

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

    マネージャーの問い合わせを容易にするために、エラーレベルの下のログは通常、エラーレベル以降のログが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プラットフォーム

    <code class="language-go">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)
    }</code>
    ログイン後にコピー
    ログイン後にコピー

    最後に、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 サイトの他の関連記事を参照してください。

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