Maison  >  Article  >  développement back-end  >  Comment lire efficacement les deux dernières lignes d’un fichier journal volumineux en Go toutes les 10 secondes ?

Comment lire efficacement les deux dernières lignes d’un fichier journal volumineux en Go toutes les 10 secondes ?

DDD
DDDoriginal
2024-11-07 18:02:03552parcourir

How to Efficiently Read the Last Two Lines of a Large Log File in Go Every 10 Seconds?

Lecture des dernières lignes de fichiers journaux volumineux dans Go toutes les 10 secondes

Lorsque vous traitez des fichiers journaux volumineux, il devient impératif de concevoir des méthodes efficaces pour surveiller et analyser les dernières données sans surcharger la mémoire. Cet article aborde ce défi en discutant d'une approche permettant de lire les deux dernières lignes d'un fichier journal toutes les 10 secondes à l'aide de Go.

Pour commencer, nous utilisons une fonction de minuterie (time.Tick) configuré pour se déclencher toutes les 10 secondes. Au sein de cette fonction, la fonction readFile est invoquée pour demander les dernières lignes du fichier journal.

Pour déterminer le point de départ de la lecture des dernières lignes, nous employons le (os .File).Stat méthode pour récupérer la taille du fichier. En supposant que chaque ligne s'étend sur environ 32 octets, nous calculons la position de départ comme fileSize - 62* (pour les deux dernières lignes).

Voici un exemple basé sur nos hypothèses :

package main

import (
    "fmt"
    "os"
    "time"
)

const MYFILE = "logfile.log"

func main() {
    c := time.Tick(10 * time.Second)
    for now := range c {
        readFile(MYFILE)
    }
}

func readFile(fname string) {
    file, err := os.Open(fname)
    if err != nil {
        panic(err)
    }
    defer file.Close()

    buf := make([]byte, 62)
    stat, statErr := file.Stat()
    if statErr != nil {
        panic(statErr)
    }
    start := stat.Size() - 62
    _, err = file.ReadAt(buf, start)
    if err == nil {
        fmt.Printf("%s\n", buf)
    }
}

Cette solution récupère efficacement les deux dernières lignes du fichier journal sans le charger complètement en mémoire, garantissant ainsi une surveillance efficace des fichiers journaux volumineux en temps réel.

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:
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