Heim Backend-Entwicklung Golang Golang-Log-Rotation

Golang-Log-Rotation

May 06, 2023 pm 12:05 PM

Golang-Protokollrotation

Mit der kontinuierlichen Entwicklung von Anwendungen ist es ein unvermeidliches Problem, dass Protokolldateien immer größer werden. Bei Anwendungen mit langer Laufzeit können die Protokolldateien mehrere Gigabyte groß sein, was zu Speicherplatzproblemen führt und dazu führt, dass Protokolldateien langsam geöffnet und gelesen werden. Daher ist für eine gute Anwendung eine angemessene Verwaltung und Rotation der Protokolldateien unbedingt erforderlich.

In Golang werden einige leistungsstarke Protokollierungsbibliotheken bereitgestellt, z. B. Protokollpaket, Zap, Logrus usw. Gemeinsam ist diesen Protokollbibliotheken, dass sie alle Protokolldateien generieren. Wenn die Protokolldateien zu groß werden, müssen wir die Rotation der Protokolldateien berücksichtigen.

Protokollebenen im Golang-Protokollmodul

Das Golang-Protokollmodul definiert verschiedene Protokollebenen wie Debug, Info, Warnung, Fehler, Schwerwiegend und Panik, beginnend mit der untersten Debug-Ebene. Hier sind ihre Definitionen:

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
)
Nach dem Login kopieren

Im Protokoll müssen wir nur Protokolle mit einer höheren Ebene als der aktuellen Protokollebene aufzeichnen, da Protokolle höherer Ebenen dringender sind. Protokollebenen helfen uns nicht nur bei der Fehlerdiagnose, sondern können auch steuern, was im Protokoll aufgezeichnet wird. Beispielsweise können wir im Debug-Level-Logger weitere Informationen protokollieren und nur Informationen zu Fehlern oder Warnungen in Release-Builds protokollieren.

Rotation von Protokolldateien

In Golang wird das Rotieren von Protokollen vom Programmierer gesteuert. Gängige Techniken zur Implementierung der Protokollrotation sind Replikation und Komprimierung. Wenn eine Protokolldatei eine bestimmte Größe oder ein bestimmtes Intervall erreicht, muss sie umbenannt und eine neue Protokolldatei erstellt werden.

Um eine Protokollrotation zu erreichen, können wir die folgenden zwei Methoden wählen:

1. Nach Zeit rotieren: Diese Methode verwendet die Zeit als Achse und speichert jeden Tag eine Datei . Wenn das Programm am nächsten Tag startet, wird eine neue Protokolldatei erstellt und die alte Protokolldatei komprimiert oder gelöscht. Der Nachteil besteht darin, dass es keine Garantie dafür gibt, dass die Dateigrößenbeschränkung nicht noch am selben Tag überschritten wird.

2. Nach Dateigröße drehen: Bei dieser Methode wird die Dateigröße als Achse verwendet. Immer wenn die Protokolldatei eine bestimmte Größenbeschränkung erreicht, wird sie umbenannt und eine neue Protokolldatei erstellt. Der Nachteil besteht darin, dass Protokolldateien nicht zeitlich unterschieden werden können.

Im Folgenden erklären wir Ihnen Schritt für Schritt, wie Sie die Protokollrotation basierend auf der Dateigröße mithilfe von Golang-Code implementieren.

Verwenden Sie die Lumberjack-Bibliothek zur Protokollrotation

Lumberjack ist eine zuverlässige Protokollbibliothek zum Rotieren von Protokolldateien entsprechend der Dateigröße. Es unterstützt das parallele Schreiben mehrerer Protokolldateien und nutzt die Funktionen von Go, um Race Conditions zu vermeiden. Lumberjack kann auch alte Protokolldateien automatisch komprimieren und so Speicherplatz sparen.

Schauen wir uns zunächst ein einfaches Beispiel an:

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)
    }
}
Nach dem Login kopieren

Im obigen Code verwenden wir die Lumberjack-Protokollierungsbibliothek für die Protokollrotation. Wir legen die Protokolldatei ./log/test.log als Ausgabedatei fest, legen die Dateigrößenbeschränkung auf 5 MB, die maximale Anzahl an Backups auf 3 und die maximale Anzahl an Speichertagen auf 28 Tage fest. Wenn die Größe der Protokolldatei 5 MB überschreitet, schreibt Lumberjack die Daten in eine neue Datei und speichert die alte Datei als .1-, .2- oder .3-Backup. Wenn die Anzahl der Sicherungen 3 überschreitet, werden alte Sicherungsdateien gelöscht. Wenn ein altes Protokoll älter als 28 Tage ist, wird es automatisch gelöscht.

Nach 12.000 Zyklen können wir die generierte Protokolldatei im Verzeichnis ./log sehen. Sie können sehen, dass Lumberjack die Protokolldateien automatisch in verschiedene Teile unterteilt und einige veraltete Protokolldateien innerhalb der angegebenen Zeit automatisch gelöscht hat.

Gemeinsame Protokollrotation

Die übliche Konfiguration rotierender Protokolle nach Zeit ist wie folgt:

logger := &lumberjack.Logger{
    Filename:   logPath,
    MaxSize:    0,
    MaxBackups: 0,
    MaxAge:     7,  // 保留最近 7 天的日志
    LocalTime:  true,
    Compress:   true, // 压缩日志文件
}
Nach dem Login kopieren

Die übliche Konfiguration rotierender Protokolle nach Dateigröße ist wie folgt:

logger := &lumberjack.Logger{
    Filename:   logPath,
    MaxSize:    100, // megabytes
    MaxBackups: 5,
    MaxAge:     30, // 保留最近 30 天的日志
    LocalTime:  true,
    Compress:   true, // 压缩日志文件
}
Nach dem Login kopieren

Zusammenfassung

In Golang können wir das Lumberjack-Protokoll verwenden Bibliothek zur Automatisierung der Protokollrotation, um das Problem übermäßig großer Protokolldateien zu lösen. Durch die flexible Konfiguration können wir den Zeitpunkt oder die Dateigröße für die Protokollrotation je nach Bedarf auswählen und veraltete Protokolldateien automatisch löschen. Dies trägt nicht nur dazu bei, das Problem zu lösen, dass Protokolldateien die Mindestspeicheranforderungen erfüllen, sondern trägt auch dazu bei, sicherzustellen, dass Anwendungen reibungslos funktionieren und nicht durch große Protokolldateien beeinträchtigt werden.

Das obige ist der detaillierte Inhalt vonGolang-Log-Rotation. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1664
14
PHP-Tutorial
1267
29
C#-Tutorial
1239
24
Golangs Zweck: Aufbau effizienter und skalierbarer Systeme Golangs Zweck: Aufbau effizienter und skalierbarer Systeme Apr 09, 2025 pm 05:17 PM

Go Language funktioniert gut beim Aufbau effizienter und skalierbarer Systeme. Zu den Vorteilen gehören: 1. hohe Leistung: Kompiliert in den Maschinencode, schnelle Laufgeschwindigkeit; 2. gleichzeitige Programmierung: Vereinfachen Sie Multitasking durch Goroutinen und Kanäle; 3. Einfachheit: präzise Syntax, Reduzierung der Lern- und Wartungskosten; 4. plattform: Unterstützt die plattformübergreifende Kompilierung, einfache Bereitstellung.

Golang gegen Python: Leistung und Skalierbarkeit Golang gegen Python: Leistung und Skalierbarkeit Apr 19, 2025 am 12:18 AM

Golang ist in Bezug auf Leistung und Skalierbarkeit besser als Python. 1) Golangs Kompilierungseigenschaften und effizientes Parallelitätsmodell machen es in hohen Parallelitätsszenarien gut ab. 2) Python wird als interpretierte Sprache langsam ausgeführt, kann aber die Leistung durch Tools wie Cython optimieren.

Golang und C: Parallelität gegen Rohgeschwindigkeit Golang und C: Parallelität gegen Rohgeschwindigkeit Apr 21, 2025 am 12:16 AM

Golang ist in Gleichzeitigkeit besser als C, während C bei Rohgeschwindigkeit besser als Golang ist. 1) Golang erreicht durch Goroutine und Kanal eine effiziente Parallelität, die zum Umgang mit einer großen Anzahl von gleichzeitigen Aufgaben geeignet ist. 2) C über Compiler -Optimierung und Standardbibliothek bietet es eine hohe Leistung in der Nähe der Hardware, die für Anwendungen geeignet ist, die eine extreme Optimierung erfordern.

Golangs Auswirkungen: Geschwindigkeit, Effizienz und Einfachheit Golangs Auswirkungen: Geschwindigkeit, Effizienz und Einfachheit Apr 14, 2025 am 12:11 AM

GoimpactsDevelopmentPositivyThroughSpeed, Effizienz und DiasMlitication.1) Geschwindigkeit: Gocompilesquickandrunseffiction, idealforlargeProjects

Golang gegen Python: Schlüsselunterschiede und Ähnlichkeiten Golang gegen Python: Schlüsselunterschiede und Ähnlichkeiten Apr 17, 2025 am 12:15 AM

Golang und Python haben jeweils ihre eigenen Vorteile: Golang ist für hohe Leistung und gleichzeitige Programmierung geeignet, während Python für Datenwissenschaft und Webentwicklung geeignet ist. Golang ist bekannt für sein Parallelitätsmodell und seine effiziente Leistung, während Python für sein Ökosystem für die kurze Syntax und sein reiches Bibliothek bekannt ist.

Golang und C: Die Kompromisse bei der Leistung Golang und C: Die Kompromisse bei der Leistung Apr 17, 2025 am 12:18 AM

Die Leistungsunterschiede zwischen Golang und C spiegeln sich hauptsächlich in der Speicherverwaltung, der Kompilierungsoptimierung und der Laufzeiteffizienz wider. 1) Golangs Müllsammlung Mechanismus ist praktisch, kann jedoch die Leistung beeinflussen.

Golang gegen C: Leistung und Geschwindigkeitsvergleich Golang gegen C: Leistung und Geschwindigkeitsvergleich Apr 21, 2025 am 12:13 AM

Golang ist für schnelle Entwicklung und gleichzeitige Szenarien geeignet, und C ist für Szenarien geeignet, in denen extreme Leistung und Kontrolle auf niedriger Ebene erforderlich sind. 1) Golang verbessert die Leistung durch Müllsammlung und Parallelitätsmechanismen und eignet sich für die Entwicklung von Webdiensten mit hoher Konsequenz. 2) C erreicht die endgültige Leistung durch das manuelle Speicherverwaltung und die Compiler -Optimierung und eignet sich für eingebettete Systementwicklung.

Das Performance -Rennen: Golang gegen C. Das Performance -Rennen: Golang gegen C. Apr 16, 2025 am 12:07 AM

Golang und C haben jeweils ihre eigenen Vorteile bei Leistungswettbewerben: 1) Golang ist für eine hohe Parallelität und schnelle Entwicklung geeignet, und 2) C bietet eine höhere Leistung und eine feinkörnige Kontrolle. Die Auswahl sollte auf Projektanforderungen und Teamtechnologie -Stack basieren.

See all articles