Apache错误日志时时查看

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

做项目的时候,有时候会需要查看一下apache的错误日志,然后就需要很繁琐的打开那个目录下面,看信息,只有当错误的时候我才会去打开那个文件。

但是最近我发现在开发的时候,自己忽略掉了很多错误,虽然不会导致出错,但是搞不好哪天就会爆发。

我不高兴每次打开那个文件,然后自己又要手动的刷新,太麻烦,所以就自己做了个网页版的,能够时时查看错误日志。

这个小工具比较简陋,就是简单的将文件内容打印到页面中,并在有新错误的时候做个title的闪动小提示。

 

当有新消息的时候标签就变成 

 

用到了三个文件,jquery就不解释了,一个脚本类库。两个php文件的编码格式我改成了ansi格式,因为一开始调试的时候,从error.txt读取出来的中文会乱码。

 

content.php

这个文件就是用来读取error.txt的信息的

$path = 'C:\Program Files (x86)\Apache Software Foundation\Apache2.2\logs\error.log';//自定义的路径
$str = file_get_contents($path);
$str = str_replace("\r\n",'<p style="padding:3px 0;margin:0"></p>', $str);
$str = str_replace('<script>', '&lt;script&gt;', $str);
$str = str_replace('</script>', '&lt;/script&gt;', $str);
echo ($str);

1、只要将path改成自己的绝对路径就可以了,还有就是将换行改成了一个p标签样式,这里也可以自定义

2、做了点粗糙的<script>过滤,如果不这么过滤,返回到index.php页面将会执行脚本代码

 

index.php

这个文件就是在展示错误信息的页面

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="gbk"/>
    <title>apache 错误日志</title>
    <script type="text/javascript" src="jquery.js"></script>
</head>
<body>
    <div id="error"></div>
    <div id="error_bak" style="display:none"></div>
    <div id="error_data" style="display:none"></div>

    <script type="text/javascript">
    //脚本逻辑
    </script>
</body>
</html>

1、页面的格式是gbk

2、有两三个div用来保存读取到的错误信息,

3、error是用来展示的,后面会做些标签添加

4、error_bak是用来备份ajax获取出来的原始信息

5、error_data是将ajax返回的数据与error_bak备份的数据做对比,判断日志是否有改变

6、脚本逻辑如下所示

<script type="text/javascript">
    var move;//定时函数的ID
    var titleName = document.title;//初始化时的页面标题
    var first = true;//是否是第一次读取错误日志
     /**
     * @method private
     * @name _setTitle
     * @description 定时显示新错误信息提示
     */
    function _setTitle() {
        var title = document.title;
        if(title == titleName){
            document.title = "【有新错误】";
        }else{
            document.title = titleName;
        }
        move = setTimeout('_setTitle()',1000);
    }
    /**
     * @method private
     * @name _filter
     * @description 将html标签过滤掉
     * @param str [string] "待过滤的字符串"
     */
    function _filter(str) {
        return str.replace(/<[^>]+>/g,"");
    }
    /**
     * @method private
     * @name _get
     * @description 异步获取错误日志
     */
    function _get() {
        var old_bak = $('#error_bak').html();//由于要将新错误标红,这里就要做一个错误的备份,下面的判断都用备份的来做
        $.get('content.php', {}, function(data) {
            $('#error_data').html(data);
            var current = $('#error_data').html();//添加到html代码中,再读取代码做比较,因为添加到html后会做转义,与ajax返回的数据就会有出入
            if(_filter(current) != _filter(old_bak)) {//与备份的做比较
                $('#error').html(data);
                $('#error_bak').html(data);
                if(!first) {
                    var red = data.replace(old_bak, '');
                    $('#error').html(old_bak + '<div style="color:red">'+red+'</div>');//将新错误标红
                    _setTitle();
                }
            }
            // console.log(_filter(data));
            // console.log(_filter(old_bak));
            first = false;
        });
    }
    $(document).ready(function() {
        //初始化读取错误日志
        _get();
        //定时获取错误日志
        setInterval(function() {
            _get();
        }, 4000);
        //在页面上随便点击一下,取消标题定时显示
        $(document).click(function() {
            document.title = titleName;
            clearTimeout(move);
        });
    });
</script>

1、用jquery的get来读取错误日志

2、有新错误日志的时候,做个小提示

3、有新的日志,才会将页面内容刷新一下

4、给新的几行错误日志加个颜色区分

5、绑定一个事件取消新错误提示

 

2014-09-22错误修正:

1、从content.php中获取到的data信息在做replace的时候,并没有替换成功,在把返回的数据添加到html中的时候,html会做一些编码,导致替换不成功。

function _get() {
       //..
        $.get('content.php', {}, function(data) {
            //...
            if(_filter(current) != _filter(old_bak)) {//与备份的做比较
                //...
                if(!first) {
                    var red = $('#error').html().replace(old_bak, '');
                    //...
                }
            }
            //..
        });
    }

 

 

刚写的一个比较粗糙的版本,还有很多问题,大家可以根据自己的情况再做修改。

 

demo下载:

http://download.csdn.net/download/loneleaf1/7916991

2014-09-22错误修正demo下载:

http://download.csdn.net/download/loneleaf1/7958451





    本文转自 咖啡机(K.F.J)   博客园博客,原文链接:http://www.cnblogs.com/strick/p/3965937.html,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
44 1
|
6月前
|
存储 算法 数据挖掘
带你读《Apache Doris 案例集》——06 Apache Doris 助力中国联通万亿日志数据分析提速10倍(2)
带你读《Apache Doris 案例集》——06 Apache Doris 助力中国联通万亿日志数据分析提速10倍(2)
237 1
|
6月前
|
存储 安全 数据挖掘
带你读《Apache Doris 案例集》——06 Apache Doris 助力中国联通万亿日志数据分析提速10倍(1)
带你读《Apache Doris 案例集》——06 Apache Doris 助力中国联通万亿日志数据分析提速10倍(1)
291 1
|
3月前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
3月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
3月前
|
存储 Ubuntu Apache
如何在 Ubuntu VPS 上配置 Apache 的日志记录和日志轮转
如何在 Ubuntu VPS 上配置 Apache 的日志记录和日志轮转
46 6
|
3月前
|
消息中间件 Java Kafka
【Azure 事件中心】开启 Apache Flink 制造者 Producer 示例代码中的日志输出 (连接 Azure Event Hub Kafka 终结点)
【Azure 事件中心】开启 Apache Flink 制造者 Producer 示例代码中的日志输出 (连接 Azure Event Hub Kafka 终结点)
|
6月前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
6月前
|
Apache
web服务器(Apache)访问日志(access_log)详细解释
web服务器(Apache)访问日志(access_log)详细解释
|
6月前
|
存储 消息中间件 监控
Zoom 基于Apache Hudi 的流式日志处理实践
Zoom 基于Apache Hudi 的流式日志处理实践
76 1

推荐镜像

更多