Sobes.tech
Junior — Middle

Kuidas saada logifaili viimased kümme rida?

sobes.tech AI

Vastus AI-lt

Go keeles, et saada logifaili viimased kümme rida, saate faili lugeda rida kaupa ja salvestada viimased 10 rida ringbuferisse (näiteks fikseeritud suurusega viil). See on mälu kasutamise poolest tõhus ning ei nõua kogu faili laadimist.

Näide:

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("Viga:", err)
		return
	}
	for _, line := range lines {
		fmt.Println(line)
	}
}

See kood loeb faili rida kaupa ja hoiab ainult viimased 10 rida.