Sobes.tech
Junior — Middle

Come ottenere le ultime dieci righe di un file di log?

sobes.tech AI

Risposta dell'AI

In Go, per ottenere le ultime dieci righe di un file di log, puoi leggere il file riga per riga e memorizzare le ultime 10 righe in un buffer circolare (ad esempio, un slice di dimensione fissa). Questo è efficiente in termini di memoria e non richiede il caricamento di tutto il file.

Esempio:

package main

import (
	"bufio"
	"fmt"
	"os"
)

func tail(filename string, n int) ([]string, error) {
	file, err := os.Open(filename)
	if err != nil {
		return nil, err
	}
	defer file.Close()

	lines := make([]string, 0, n)
	scanner := bufio.NewScanner(file)

	for scanner.Scan() {
		if len(lines) == n {
			lines = lines[1:]
		}
		lines = append(lines, scanner.Text())
	}

	if err := scanner.Err(); err != nil {
		return nil, err
	}

	return lines, nil
}

func main() {
	lines, err := tail("logfile.log", 10)
	if err != nil {
		fmt.Println("Errore:", err)
		return
	}
	for _, line := range lines {
		fmt.Println(line)
	}
}

Questo codice legge il file riga per riga, conservando solo le ultime 10 righe.