Maison >développement back-end >Golang >rotation du journal Golang
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 )
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) } }
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, // 压缩日志文件 }
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, // 压缩日志文件 }
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!