php模拟tail -f 实时输出日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: php模拟tail -f 实时输出日志

有时候我们需要实时的输出一些日志文件,LINUX下有一个tail命令非常 好用,但我们服务器不是linux或者没有权限时,可以使用以下脚本来实现:

<?php
/**
* php模拟tail -f file.log 实时输出日志
* 请先指定日志目录,调用方式:oblog.php?f=file.log
* 本代码在nginx服务器下可能不能正常工作
*
* @author Steven.liao<lxq73061@163.com>
* @modify_date 2017-05-11 16:04
* @link http://www.onebound.cn
*
*/
if(1 != count($_GET)){
   echo  "调用格式错误!使用格式 oblog.php?f=file.log".PHP_EOL;
   exit();
}
$dir = dirname(__FILE__).'/runtime/logs/';//定义日志保存的目录
$file_name      = $_GET['f'];//日志文件名
if(strpos($file_name,'..')!==false){//禁止访问上级目录
  echo 'Error!';
  exit();
}
$file_name  = $dir . $file_name;
define("MAX_SHOW", 8192);//每次最多输出多少字节
$file_size      = 0;
$file_size_new  = 0;
$add_size       = 0;
$ignore_size    = 0;
echo str_pad('',4096);
echo str_repeat(' ', 1024*256);
echo '<script>function gb(){ var h = document.documentElement.scrollHeight || document.body.scrollHeight; window.scrollTo(h+200,h+200);};setInterval("gb();",1000)</script>'; 
$fp = fopen($file_name, "r"); 
while($fp && 1){ 
clearstatcache(); 
$file_size_new = filesize($file_name); 
$add_size = $file_size_new - $file_size; 
if($add_size > 0){ 
if($add_size > MAX_SHOW){ 
$ignore_size = $add_size - MAX_SHOW; 
$add_size = MAX_SHOW; 
fseek($fp, $file_size + $ignore_size); 
} 
$new = fread($fp, $add_size); 
if($new){ 
echo nl2br($new); ob_flush();flush(); 
} 
$file_size = $file_size_new; 
} 
usleep(50000); 
} 
fclose($fp);
 ?>

效果可以自己打印

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
3
分享
相关文章
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
17 3
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
33 10
|
15天前
|
基于责任链与策略模式的轻量级PHP日志库设计
项目日志乱成一团,bug 时好时坏,服务器问题难以复现?我写了个 PHP 日志系统,第一时间发现问题,避免跑路。实现了责任链模式+策略模式,让日志存储更灵活,支持多种输出方式。
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
85 2
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
Ngnix09目录结构分析,使用tree工具可以Ngnix目录中以一个树的方式呈现出来,yum install -y tree,tail -f nginx/logs/access.log
Ngnix09目录结构分析,使用tree工具可以Ngnix目录中以一个树的方式呈现出来,yum install -y tree,tail -f nginx/logs/access.log
go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控
go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控
188 0
PHP中的异常处理与错误日志记录
【6月更文挑战第9天】本文深入探讨了PHP编程语言中异常处理的机制和错误日志记录的策略。我们将通过具体实例来展示如何有效地捕获和处理运行时错误,以及如何利用PHP的错误日志功能来监控和维护代码的健康状态。
78 0
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
1399 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
109 9

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等