Maison > développement back-end > Golang > le corps du texte

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

DDD
Libérer: 2024-11-07 18:02:03
original
564 Les gens l'ont consulté

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

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!