通过javascript/jquery跟踪-f实时日志

Tail -f realtime log via javascript / jquery

本文关键字:实时 日志 跟踪 jquery javascript 通过      更新时间:2023-09-26

我试图获得一个Real tail-f类型的查看器。

http://commavee.com/2007/04/13/ajax-logfile-tailer-viewer/(我做了半成品,但它并没有真正缓冲它)它每2秒重写一次tail-20,并没有真正对它进行缓冲并使其可滚动(需要构建一些东西来最终保存文件,但那是以后的事),如果我尝试tail-f,命令将始终执行,而不会停止

我是否需要考虑某种类型的obflush*(我用我正在使用的ping工具尝试过,经过几天的研究,php.ini中设置了output_braining=off,没有LUCK)*

<?
// logtail.php
$cmd = "tail -20 /usr/local/bin/logs/outages.log";
exec("$cmd 2>&1", $output);
foreach($output as $outputline) {
 echo ("$outputline'n");
}
?>

这是LOGTAIL.JS

function getLog(timer) {
  var url = "logtail.php";
  request1.open("GET", url, true);
  request1.onreadystatechange = updatePage;
  request1.send(null);
  startTail(timer);
}
function startTail(timer) {
  if (timer == "stop") {
    stopTail();
  } else {
    t= setTimeout("getLog()",1000);
  }
}
function stopTail() {
  clearTimeout(t);
  var pause = "The log viewer has been paused. To begin viewing again, click the Start Viewer button.'r'n'r'n";
  logDiv = document.getElementById("log");
  var newNode=document.createTextNode(pause);
  logDiv.replaceChild(newNode,logDiv.childNodes[0]);
}
function updatePage() {
  if (request1.readyState == 4) {
    if (request1.status == 200) {
      var currentLogValue = request1.responseText.split("'n");
      eval(currentLogValue);
      logDiv = document.getElementById("log");
      logDiv.scrollTop = logDiv.scrollHeight;
      var logLine = ' ';
      for (i=0; i < currentLogValue.length - 1; i++) {
        logLine += currentLogValue[i] + "<br/>'n";
      }
      logDiv.innerHTML=logLine;
      //} else
      //alert("Error! Request status is " + request1.status);
    }
  }
}

您可以采取稍微不同的方法,使用Comet将消息从tail推送到浏览器。这里有一个关于PHP/Commet的好答案:将Comet与PHP一起使用?