Go で大きなログ ファイルから 10 秒ごとに最後の行を読み取る
大きなログ ファイルを扱う場合、効率的な方法を考案することが不可欠になりますメモリに過負荷をかけることなく、最新のデータを監視および分析できます。この記事では、Go を使用してログ ファイルの最後の 2 行を 10 秒ごとに読み取るアプローチについて説明することで、この課題に取り組みます。
まず、タイマー関数 (time.Tick) を利用します。 10 秒ごとにトリガーするように設定されています。この関数内では、readFile 関数が呼び出され、ログ ファイルから最新の行をリクエストします。
最後の行の読み取りの開始点を決定するために、(os) .File).Stat メソッドを使用してファイルのサイズを取得します。各行が約 32 バイトであると仮定して、開始位置を fileSize - 62* (最後の 2 行の場合) として計算します。
仮定に基づいた例を次に示します。
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) } }
このソリューションは、ログ ファイルをメモリに完全にロードすることなく、ログ ファイルの最後の 2 行を効率的に取得し、大きなログ ファイルをリアルタイムで効率的に監視できるようにします。
以上がGo で大きなログ ファイルの最後の 2 行を 10 秒ごとに効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。