jak mogę odczytać ostatnie dwie linie z dużego pliku dziennika bez załadowania go do pamięci?Jak odczytywać ostatnie wiersze dużego pliku z Go co 10 sekund
muszę ją przeczytać co 10 sekund (na komputerze Win) ... a ja utknąłem próbuje odczytać ostatnie linie ..
package main
import (
"fmt"
"time"
"os"
)
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)
}
buf:=make([]byte, 32)
c, err:=file.ReadAt(32, ????)
fmt.Printf("%s\n", c)
}
Plik dziennika jest coś takiego:
07/25/2013 11:55:42.400, 0.559
07/25/2013 11:55:52.200, 0.477
07/25/2013 11:56:02.000, 0.463
07/25/2013 11:56:11.800, 0.454
07/25/2013 11:56:21.600, 0.424
07/25/2013 11:56:31.400, 0.382
07/25/2013 11:56:41.200, 0.353
07/25/2013 11:56:51.000, 0.384
07/25/2013 11:57:00.800, 0.393
07/25/2013 11:57:10.600, 0.456
Dzięki!
Dzięki @Joshua było to lepsze podejście do mnie – Goku
bym file.Seek (62, 2) z koniec zamiast, a potem tylko plik.Re reklama z bieżącej pozycji. file.Seek, podejrzewam, jest znacznie tańszy niż os.Stat. – alex
@Joshua - A co powiesz na czytanie linii, której nie znamy rozmiaru bajtu? – Mir