Maison développement back-end Golang rotation du journal Golang

rotation du journal Golang

May 06, 2023 pm 12:05 PM

Golang Log Rotation

Avec le développement continu des applications, il est inévitable que les fichiers journaux deviennent de plus en plus volumineux. Pour les applications de longue durée, les fichiers journaux peuvent atteindre plusieurs gigaoctets, ce qui peut créer des problèmes d'espace disque et ralentir l'ouverture et la lecture des fichiers journaux. Par conséquent, pour une bonne application, une gestion et une rotation raisonnables des fichiers journaux sont indispensables.

Dans Golang, certaines bibliothèques de journalisation puissantes sont fournies, telles que log package, zap, logrus, etc. Ce que ces bibliothèques de journaux ont en commun, c'est qu'elles génèrent toutes des fichiers journaux. Si les fichiers journaux deviennent trop volumineux, nous devons envisager la rotation des fichiers journaux.

Niveaux de journalisation dans le module de journalisation Golang

Le module de journalisation Golang définit différents niveaux de journalisation, tels que Debug, Info, Warning, Error, Fatal et Panic, en commençant par le niveau de débogage le plus bas. Voici leurs définitions :

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
)
Copier après la connexion

Dans le journal, nous devons uniquement enregistrer les journaux d'un niveau supérieur au niveau de journal actuel, car les journaux de niveau supérieur sont plus urgents. En plus de nous aider à diagnostiquer les erreurs, les niveaux de journalisation peuvent également contrôler ce qui est enregistré dans le journal. Par exemple, nous pouvons enregistrer plus d'informations dans l'enregistreur de niveau Debug et enregistrer uniquement les informations sur les erreurs ou les avertissements dans les versions Release.

Rotation des fichiers journaux

Dans Golang, la rotation des journaux est contrôlée par le programmeur. Les techniques courantes pour implémenter la rotation des journaux sont la réplication et la compression. Lorsqu'un fichier journal atteint une certaine taille ou un certain intervalle, il doit être renommé et un nouveau fichier journal créé.

Afin d'obtenir la rotation du journal, nous pouvons choisir les deux méthodes suivantes :

1. Rotation par temps : Cette méthode utilise le temps comme axe, enregistrant un fichier chaque jour, et le fichier journal quotidien n'enregistre que le journal de celui-ci. jour. Lorsque le programme démarre le lendemain, un nouveau fichier journal est créé et l'ancien fichier journal est compressé ou supprimé. L’inconvénient est qu’il n’y a aucune garantie que la limite de taille de fichier ne sera pas dépassée dans la même journée.

2. Rotation par taille de fichier : Cette méthode prend la taille du fichier comme axe Chaque fois que le fichier journal atteint une certaine limite de taille, il est renommé et un nouveau fichier journal est créé. L’inconvénient est que les fichiers journaux ne peuvent pas être distingués en fonction du temps.

Ci-dessous, nous présenterons étape par étape comment implémenter la rotation des journaux en fonction de la taille du fichier via le code Golang.

Utilisez la bibliothèque Lumberjack pour la rotation des journaux

Lumberjack est une bibliothèque de journaux fiable pour faire pivoter les fichiers journaux en fonction de leur taille. Il prend en charge l'écriture de plusieurs fichiers journaux en parallèle et tire parti des fonctionnalités de Go pour éviter les conditions de concurrence. Lumberjack peut également compresser automatiquement les anciens fichiers journaux, économisant ainsi de l'espace disque.

Regardons d'abord un exemple simple :

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)
    }
}
Copier après la connexion

Dans le code ci-dessus, nous utilisons la bibliothèque de journalisation Lumberjack pour la rotation des journaux. Nous définissons le fichier journal ./log/test.log comme fichier de sortie, définissons la limite de taille du fichier à 5 Mo, le nombre maximum de sauvegardes à 3 et le nombre maximum de jours de stockage à 28 jours. Lorsque la taille du fichier journal dépasse 5 Mo, Lumberjack écrit les données dans un nouveau fichier et enregistre l'ancien fichier en tant que sauvegarde .1, .2 ou .3. Lorsque le nombre de sauvegardes dépasse 3, les anciens fichiers de sauvegarde seront supprimés. Lorsqu'un ancien journal date de plus de 28 jours, il sera automatiquement supprimé.

Après 12 000 cycles, nous pouvons voir le fichier journal généré dans le répertoire ./log. Vous pouvez voir que Lumberjack a automatiquement divisé les fichiers journaux en différentes parties et supprimé automatiquement certains fichiers journaux obsolètes dans le délai spécifié.

Rotation commune des journaux

La configuration courante de la rotation des journaux par temps est la suivante :

logger := &lumberjack.Logger{
    Filename:   logPath,
    MaxSize:    0,
    MaxBackups: 0,
    MaxAge:     7,  // 保留最近 7 天的日志
    LocalTime:  true,
    Compress:   true, // 压缩日志文件
}
Copier après la connexion

La configuration courante de la rotation des journaux par taille de fichier est la suivante :

logger := &lumberjack.Logger{
    Filename:   logPath,
    MaxSize:    100, // megabytes
    MaxBackups: 5,
    MaxAge:     30, // 保留最近 30 天的日志
    LocalTime:  true,
    Compress:   true, // 压缩日志文件
}
Copier après la connexion

Résumé

Dans Golang, nous pouvons utiliser le journal Lumberjack bibliothèque pour réaliser l'automatisation Rotation des journaux pour résoudre le problème des fichiers journaux trop volumineux. Grâce à une configuration flexible, nous pouvons sélectionner l'heure ou la taille du fichier pour la rotation des journaux en fonction des besoins et supprimer automatiquement les fichiers journaux obsolètes. Cela permet non seulement de résoudre le problème des fichiers journaux répondant aux exigences minimales de stockage, mais permet également de garantir que les applications fonctionnent correctement et ne sont pas affectées par des fichiers journaux volumineux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
Nordhold: Système de fusion, expliqué
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1673
14
Tutoriel PHP
1278
29
Tutoriel C#
1257
24
Golang vs Python: performance et évolutivité Golang vs Python: performance et évolutivité Apr 19, 2025 am 12:18 AM

Golang est meilleur que Python en termes de performances et d'évolutivité. 1) Les caractéristiques de type compilation de Golang et le modèle de concurrence efficace le font bien fonctionner dans des scénarios de concurrence élevés. 2) Python, en tant que langue interprétée, s'exécute lentement, mais peut optimiser les performances via des outils tels que Cython.

Golang et C: concurrence vs vitesse brute Golang et C: concurrence vs vitesse brute Apr 21, 2025 am 12:16 AM

Golang est meilleur que C en concurrence, tandis que C est meilleur que Golang en vitesse brute. 1) Golang obtient une concurrence efficace par le goroutine et le canal, ce qui convient à la gestion d'un grand nombre de tâches simultanées. 2) C Grâce à l'optimisation du compilateur et à la bibliothèque standard, il offre des performances élevées près du matériel, adaptées aux applications qui nécessitent une optimisation extrême.

Partage avec Go: un guide du débutant Partage avec Go: un guide du débutant Apr 26, 2025 am 12:21 AM

GOISIDEALFORBEGINNERNERS et combinant pour pourcloudandNetWorkServicesDuetOtssimplicity, Efficiency, andCurrencyFeatures.1) InstallgofromTheofficialwebsiteandverifywith'goversion'..2)

Golang vs C: Performance et comparaison de la vitesse Golang vs C: Performance et comparaison de la vitesse Apr 21, 2025 am 12:13 AM

Golang convient au développement rapide et aux scénarios simultanés, et C convient aux scénarios où des performances extrêmes et un contrôle de bas niveau sont nécessaires. 1) Golang améliore les performances grâce à des mécanismes de collecte et de concurrence des ordures, et convient au développement de services Web à haute concurrence. 2) C réalise les performances ultimes grâce à la gestion manuelle de la mémoire et à l'optimisation du compilateur, et convient au développement du système intégré.

Golang vs Python: différences et similitudes clés Golang vs Python: différences et similitudes clés Apr 17, 2025 am 12:15 AM

Golang et Python ont chacun leurs propres avantages: Golang convient aux performances élevées et à la programmation simultanée, tandis que Python convient à la science des données et au développement Web. Golang est connu pour son modèle de concurrence et ses performances efficaces, tandis que Python est connu pour sa syntaxe concise et son écosystème de bibliothèque riche.

Golang et C: les compromis en performance Golang et C: les compromis en performance Apr 17, 2025 am 12:18 AM

Les différences de performance entre Golang et C se reflètent principalement dans la gestion de la mémoire, l'optimisation de la compilation et l'efficacité du temps d'exécution. 1) Le mécanisme de collecte des ordures de Golang est pratique mais peut affecter les performances, 2) la gestion manuelle de C et l'optimisation du compilateur sont plus efficaces dans l'informatique récursive.

La course de performance: Golang vs C La course de performance: Golang vs C Apr 16, 2025 am 12:07 AM

Golang et C ont chacun leurs propres avantages dans les compétitions de performance: 1) Golang convient à une concurrence élevée et à un développement rapide, et 2) C fournit des performances plus élevées et un contrôle fin. La sélection doit être basée sur les exigences du projet et la pile de technologie d'équipe.

Golang contre Python: les avantages et les inconvénients Golang contre Python: les avantages et les inconvénients Apr 21, 2025 am 12:17 AM

GolangisidealforBuildingsCalableSystemsDuetoitSefficiency and Concurrency, tandis que les Implicites de l'Indrecosystem et le Golang'sDesignenCourageSlecElNCORES

See all articles