ホームページ バックエンド開発 Golang golang ログローテーション

golang ログローテーション

May 06, 2023 pm 12:05 PM

Golang ログ ローテーション

アプリケーションの継続的な開発に伴い、ログ ファイルがますます大きくなるのは避けられない問題です。長時間実行されるアプリケーションの場合、ログ ファイルが数ギガバイトに達する可能性があり、これによりディスク領域の問題が発生し、ログ ファイルを開いたり読み取ったりする速度が遅くなる可能性があります。したがって、優れたアプリケーションには、ログ ファイルの合理的な管理とローテーションが非常に必要です。

Golang では、ログ パッケージ、zap、logrus などの強力なログ ライブラリがいくつか提供されています。これらのログ ライブラリの共通点は、ログ ファイルを生成することですが、ログ ファイルが大きくなりすぎる場合は、ログ ファイルのローテーションを考慮する必要があります。

Golang ログ モジュールのログ レベル

Golang ログ モジュールは、最も低いレベルの Debug から始めて、Debug、Info、Warning、Error、Fatal、Panic などのさまざまなログ レベルを定義します。それらの定義は次のとおりです。

const (
    Ldate         = 1 << iota     // 日期
    Ltime                         // 时间
    Lmicroseconds                 // 微秒时间戳
    Llongfile                     // 完整文件路径名和行号:XXXX/XXXX/line
    Lshortfile                    // 文件名和行号:line
    LUTC                          // 如果设置了 Ldate 或 Ltime,则使用 UTC 时间,否则使用本地时间
    LstdFlags     = Ldate | Ltime // 指定标准日志记录器应具有的默认标志
)
const (
    TraceLevel int = iota
    DebugLevel
    InfoLevel
    WarnLevel
    ErrorLevel
    PanicLevel
    FatalLevel
    NoLevel
)
ログイン後にコピー

ログには、現在のログ レベルよりも高いレベルのログのみを記録する必要があります。これは、より高いレベルのログの方が緊急性が高いためです。ログ レベルは、エラーの診断に役立つだけでなく、ログに記録される内容を制御することもできます。たとえば、デバッグ レベルのロガーにはより多くの情報を記録し、リリース ビルドではエラーまたは警告に関する情報のみを記録できます。

ログ ファイルのローテーション

Golang では、ログのローテーションはプログラマによって制御されます。ログ ローテーションを実装するための一般的な手法は、レプリケーションと圧縮です。ログ ファイルが特定のサイズまたは間隔に達したら、名前を変更して新しいログ ファイルを作成する必要があります。

ログ ローテーションを実現するには、次の 2 つの方法を選択できます:

1. 時間によるローテーション: この方法は時間を軸にし、毎日 1 つのファイルを保存し、記録のみを保存します。デイリーログファイル 今日のログ。翌日プログラムが開始されると、新しいログ ファイルが作成され、古いログ ファイルは圧縮または削除されます。欠点は、その日のうちにファイル サイズ制限を超えないという保証がないことです。

2. ファイル サイズによる回転: この方法では、ファイル サイズを軸として使用し、ログ ファイルが特定のサイズ制限に達すると、名前が変更され、新しいログ ファイルが作成されます。欠点は、ログ ファイルを時間に基づいて区別できないことです。

以下では、Golang コードを使用してファイル サイズに基づいてログ ローテーションを実装する方法を段階的に紹介します。

ログ ローテーションに Lumberjack ライブラリを使用する

Lumberjack は、ファイル サイズに応じてログ ファイルをローテーションするために使用される信頼性の高いログ ライブラリです。複数のログ ファイルの並列書き込みをサポートし、Go の機能を利用して競合状態を回避します。 Lumberjack は古いログ ファイルを自動的に圧縮して、ディスク領域を節約することもできます。

最初に簡単な例を見てみましょう:

package main

import (
    "github.com/natefinch/lumberjack"
    "log"
)

func main() {
    logger := &lumberjack.Logger{
        Filename:   "./log/test.log",
        MaxSize:    5, // megabytes
        MaxBackups: 3,
        MaxAge:     28, // days
    }

    log.SetOutput(logger)

    // 测试日志轮转
    for i := 0; i < 12000; i++ {
        log.Println(i)
    }
}
ログイン後にコピー

上記のコードでは、ログ ローテーションに Lumberjack ログ ライブラリを使用します。ログ ファイル ./log/test.log を出力ファイルとして設定し、ファイル サイズ制限を 5 MB、バックアップの最大数を 3、最大保存日数を 28 日に設定します。ログ ファイルのサイズが 5 MB を超えると、Lumberjack はデータを新しいファイルに書き込み、古いファイルを .1、.2、または .3 バックアップとして保存します。バックアップ数が 3 つを超えると、古いバックアップ ファイルが削除されます。古いログが 28 日を超えると、自動的に削除されます。

12,000 サイクル後、./log ディレクトリに生成されたログ ファイルが表示されます。 Lumberjack がログ ファイルを自動的にさまざまな部分に分割し、指定された時間内に一部の古いログ ファイルを自動的に削除したことがわかります。

一般的なログ ローテーション

時間によるログのローテーションの一般的な構成は次のとおりです:

logger := &lumberjack.Logger{
    Filename:   logPath,
    MaxSize:    0,
    MaxBackups: 0,
    MaxAge:     7,  // 保留最近 7 天的日志
    LocalTime:  true,
    Compress:   true, // 压缩日志文件
}
ログイン後にコピー

ファイル サイズによるログのローテーションの一般的な構成は次のとおりです:

logger := &lumberjack.Logger{
    Filename:   logPath,
    MaxSize:    100, // megabytes
    MaxBackups: 5,
    MaxAge:     30, // 保留最近 30 天的日志
    LocalTime:  true,
    Compress:   true, // 压缩日志文件
}
ログイン後にコピー

概要

Golang では、Lumberjack ログ ライブラリを使用して自動ログ ローテーションを実装し、大きすぎるログ ファイルの問題を解決できます。柔軟な構成により、必要に応じてログ ローテーションの時間やファイル サイズを選択し、古いログ ファイルを自動的に削除できます。これは、最小ストレージ要件を満たすログ ファイルの問題を解決するだけでなく、アプリケーションがスムーズに実行され、大きなログ ファイルの影響を受けないようにすることにも役立ちます。

以上がgolang ログローテーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golangの目的:効率的でスケーラブルなシステムの構築 Golangの目的:効率的でスケーラブルなシステムの構築 Apr 09, 2025 pm 05:17 PM

GO言語は、効率的でスケーラブルなシステムの構築においてうまく機能します。その利点には次のものがあります。1。高性能:マシンコードにコンパイルされ、速度速度が速い。 2。同時プログラミング:ゴルチンとチャネルを介してマルチタスクを簡素化します。 3。シンプルさ:簡潔な構文、学習コストとメンテナンスコストの削減。 4。クロスプラットフォーム:クロスプラットフォームのコンパイル、簡単な展開をサポートします。

Golang vs. Python:パフォーマンスとスケーラビリティ Golang vs. Python:パフォーマンスとスケーラビリティ Apr 19, 2025 am 12:18 AM

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Golang and C:Concurrency vs. Raw Speed Golang and C:Concurrency vs. Raw Speed Apr 21, 2025 am 12:16 AM

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

Golangの影響:速度、効率、シンプルさ Golangの影響:速度、効率、シンプルさ Apr 14, 2025 am 12:11 AM

speed、効率、およびシンプル性をspeedsped.1)speed:gocompilesquilesquicklyandrunseffictient、理想的なlargeprojects.2)効率:等系dribribraryreducesexexternaldedenciess、開発効果を高める3)シンプルさ:

Golang vs. Python:重要な違​​いと類似点 Golang vs. Python:重要な違​​いと類似点 Apr 17, 2025 am 12:15 AM

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

GolangとC:パフォーマンスのトレードオフ GolangとC:パフォーマンスのトレードオフ Apr 17, 2025 am 12:18 AM

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

パフォーマンスレース:ゴラン対c パフォーマンスレース:ゴラン対c Apr 16, 2025 am 12:07 AM

GolangとCにはそれぞれパフォーマンス競争において独自の利点があります。1)Golangは、高い並行性と迅速な発展に適しており、2)Cはより高いパフォーマンスと微細な制御を提供します。選択は、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

Golang vs. C:パフォーマンスと速度の比較 Golang vs. C:パフォーマンスと速度の比較 Apr 21, 2025 am 12:13 AM

Golangは迅速な発展と同時シナリオに適しており、Cは極端なパフォーマンスと低レベルの制御が必要なシナリオに適しています。 1)Golangは、ごみ収集と並行機関のメカニズムを通じてパフォーマンスを向上させ、高配列Webサービス開発に適しています。 2)Cは、手動のメモリ管理とコンパイラの最適化を通じて究極のパフォーマンスを実現し、埋め込みシステム開発に適しています。

See all articles