实时显示日志文件的最后100行

时间:2017-10-16 17:42:46

标签: php html file logging

我希望能够在div窗口中显示日志文件的最后100行,并让它实时更新,因此如果将某些内容写入日志,该窗口将写入新的日志内容用户看。目前我只做了一次,但它工作正常,我只需要一种方法来实时更新它每秒:

<?php
$file = "logfile.log";
$f = fopen($file, "r");
while ($line = fgets($f, 100) ) {
    print $line . "<br/>";
}
?>

1 个答案:

答案 0 :(得分:3)

这是一个基本的解决方案。

这是你的html和js index.php

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Read Log File</title>

</head>

<body>
<div>
    <ul id="log">

    </ul>
</div>
<script src="./jquery-3.2.1.min.js"></script> 
<script>

    $(function(){

        setInterval(function(){
            $.getJSON( "./getLog.php", function( data ) {
              var $log = $('#log');
              $.each( data, function( key, val ) {
                $log.prepend( "<li>" + val + "</li>" );
              });
            });

        },5000);

    });

</script>
</body>
</html>

这是你的php文件getLog.php

  <?php

  session_start();

  $file  = '/path/to/your/file_log';

  $total_lines = shell_exec('cat ' . escapeshellarg($file) . ' | wc -l');

  if(isset($_SESSION['current_line']) && $_SESSION['current_line'] < $total_lines){

    $lines = shell_exec('tail -n' . ($total_lines - $_SESSION['current_line']) . ' ' . escapeshellarg($file));

  } else if(!isset($_SESSION['current_line'])){

    $lines = shell_exec('tail -n100 ' . escapeshellarg($file));

  }

  $_SESSION['current_line'] = $total_lines;

  $lines_array = array_filter(preg_split('#[\r\n]+#', trim($lines)));

  if(count($lines_array)){
    echo json_encode($lines_array);
  }

  ?>