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!