相关疑难解决方法(0)

拖尾日志文件并将结果写入新文件

我不知道怎么说这个,所以我会打出来然后编辑并回答任何问题.

目前在我的本地网络设备(基于PHP4)上我使用它来定制一个实时系统日志文件:http://commavee.com/2007/04/13/ajax-logfile-tailer-viewer/

这很好用,并且每1秒加载一个执行a的外部页面(logfile.php)tail -n 100 logfile.log .脚本不进行任何缓冲,因此它在屏幕上显示的结果是日志文件中的最后100行.

logfile.php包含:

<? // logtail.php $cmd = "tail -10 /path/to/your/logs/some.log"; exec("$cmd 2>&1", $output);
foreach($output as $outputline) {
 echo ("$outputline\n");
}
?>
Run Code Online (Sandbox Code Playgroud)

这部分运作良好.

我已经调整了logfile.php页面,将$ outputline写入一个新的文本文件,只需使用 fwrite($fp,$outputline."\n");

虽然这有效但我在创建的新文件中存在重复问题.

显然每次运行tail -n 100都会产生结果,下次运行它会产生一些相同的行,因为重复这一点我最终会在新的文本文件中出现多行重复.

我不能直接比较我要写入前一行的行,因为可能有相同的匹配.

有没有什么方法可以比较当前100行的块与前一个块,然后只写不匹配的行..再次可能的问题,块A和B将包含所需的相同行...

是否可以更新logfile.php以记录它在我的日志文件中最后占用的位置,然后只读取那里的下一行并将其写入新文件?

日志文件可能高达500MB,所以我不想每次都读取它.

任何建议或建议欢迎..

谢谢

更新@ 16:30

我有点使用这个:

$file = "/logs/syst.log";
$handle = fopen($file, "r");

if(isset($_SESSION['ftell'])) {   
    clearstatcache();
    fseek($handle, $_SESSION['ftell']); 

    while ($buffer = fgets($handle)) { 
        echo $buffer."<br/>";
        @ob_flush(); @flush();
    }   

    fclose($handle);
    @$_SESSION['ftell'] = ftell($handle);        
} else {
    fseek($handle, -1024, SEEK_END); …
Run Code Online (Sandbox Code Playgroud)

php jquery logging tail

9
推荐指数
1
解决办法
1564
查看次数

标签 统计

jquery ×1

logging ×1

php ×1

tail ×1