aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 68912|回复: 99

Apache|Nginx日志分析工具

 火.. [复制链接]

53

主题

216

回帖

1708

积分

四级会员

积分
1708
发表于 2012-11-9 17:54:16 | 显示全部楼层 |阅读模式
本帖最后由 winner 于 2012-11-9 21:09 编辑

1个小时写完,很简单就是分割字符串而已

可查看含有某些字符的项目,

例如 baidu.,
也可以用模式匹配语法 例如这样 404.*?baidu

PS:发现apache的日志也是可以用的


QQ截图20121109210908.png

EXE文件:http://good.gd/2291915.htm

源码:

import win.ui;
/*DSG{{*/
mainForm = ..win.form( bottom=487;parent=...;right=891;text=
"Nginx日志分析工具 Power by aardio";maxmize=1 )
mainForm.add(
button2={ dl=1;bottom=37;text=
"筛选(包含指定词)";left=768;dt=1;top=13;z=4;right=881;cls="button" };
listview={ dr=1;dl=1;bgcolor=16777215;right=883;left=9;dt=1;db=1;cls=
"listview";bottom=478;top=60;z=1;gridLines=1;edge=1;fullRow=1 };
edit={ dl=1;bottom=35;right=510;left=12;dt=1;top=13;z=3;edge=1;cls=
"edit" };
button={ dl=1;bottom=36;text=
"选择日志文件";left=517;dt=1;top=12;z=2;right=608;cls="button" };
edit2={ dl=1;bottom=36;text=
"Baiduspider";left=630;dt=1;top=14;z=5;right=761;edge=1;cls="edit" }
)
/*}}*/

//插入列
var logList = mainForm.listview
logList.insertColumn(
"IP",150)
logList.insertColumn(
"Time",150)
logList.insertColumn(
"Method",100)
logList.insertColumn(
"Url",300)
logList.insertColumn(
"HTTP",50)
logList.insertColumn(
"Status",50)
logList.insertColumn(
"Length",50)
logList.insertColumn(
"User-Agent",600)



//线程方法, 参数[列表句柄,日志文件位置,包含词语]
function insertList(hwnd,logPath,keyword){
   
import win;
   
import win.ui.ctrl.listview;
   
   
var listview = win.ui.ctrl.listview()   
    listview.hwnd = hwnd;
    listview.clear()   
//清除原来列表
   
    thread.set(
"stop", false)
    io.print(hwnd,logPath,keyword)
   
var lineNum = 0
   
//遍历日志文件
    for line in io.lines(logPath) {
        
//中途重新查询的可能性,所以价格判断
        var stop = thread.get("stop")
        
if(stop){
            listview.clear()   
//清除原来列表
            break;
        }
        
//如果定义了包含词语,但是没有查找到这个词语,则跳过,不插入
        if(keyword && !string.find(line,keyword)){  
            
continue ;
        }
        
var lineTxt = string.trim(line,'\n')
        
var logTab = string.split(lineTxt," ")  //以空格,分割每行的字符串

        
//table.remove(logTab,1)
        //移出无用元素
        table.remove(logTab,2)
        table.remove(logTab,2)
        table.remove(logTab,3)
        table.remove(logTab,8)
        
//去掉时间前面的符号 [
        logTab[2] = string.trim(logTab[2],"'\[")
        
var user_agent = ""
        
//合并最后的user-agent
        for(i=8;table.count(logTab);1){
            user_agent += logTab[ i ]
        }
        logTab[8] = user_agent;
        
//插入到列表
        listview.addItem(logTab)
        lineNum++;  
//计算行数
        if(lineNum%50 == 0){    //每50行,更新一下总数,翻一下页
            listview.ensureVisible(lineNum) //反一下页,不然别人以为卡住了
            listview.setColumnText(1,"IP("++listview.count++")")    //设置总数
        }
        win.delay(1)
    }
    listview.setColumnText(1,
"IP("++listview.count++")")
}

//选择日志文件
mainForm.button.oncommand = function(id,event){
   
//mainForm.msgbox( mainForm.button.text );
    import fsys.dlg;
   
var path = fsys.dlg.open("*.*||","选择日志文件")
   
if(path){
        
//设置界面上的路径值
        mainForm.edit.text = path;
        thread.set(
"stop", true)    //先停止以前的线程
        //创建一个 insertList线程,用来遍历日志,插入到列表中
        thread.create(
            insertList,
            mainForm.listview.hwnd,
            path
        )
    }
}
//只显示包含词
mainForm.button2.oncommand = function(id,event){
   
if(mainForm.edit.text){
        thread.set(
"stop", true)    //先停止以前的线程
        //创建一个 insertList线程,用来遍历日志,插入到列表中
        thread.create(
            insertList,
            mainForm.listview.hwnd,
            mainForm.edit.text,     
//传入日志文件路径
            mainForm.edit2.text //传入包含词,上面那个没有参数
        )
    }
else{
        win.msgboxTest(
"必须先选择日志文件!","提示")
    }
}


import config;
mainForm.bindConfig( config.mainForm,{
    edit =
"text"; //绑定edit控件的text属性值到配置文件
    radiobutton = "checked";
    checkbox =
"checked";
    combobox =
"selIndex";
} );



mainForm.show()
win.loopMessage();

测试用的日志文件 test.zip (372 Bytes, 下载次数: 691)

项目打包(带皮肤): Nginx日志分析工具.zip (23.29 KB, 下载次数: 102)

评分

参与人数 3 +400 +410 收起 理由
雨花 + 10 神马都是浮云
qqmmcc + 100 + 100 感谢分享
JacenHe + 300 + 300 很给力!

查看全部评分

9

主题

193

回帖

1297

积分

四级会员

积分
1297
发表于 2012-11-9 20:12:28 | 显示全部楼层
不错,

53

主题

216

回帖

1708

积分

四级会员

积分
1708
 楼主| 发表于 2012-11-9 21:05:15 | 显示全部楼层
可以配合下面这个使用

用aardio开发了一个Nginx服务器日志切割工具
http://bbs.aardio.com/thread-8200-1-1.html

39

主题

164

回帖

1351

积分

四级会员

积分
1351
发表于 2012-11-9 21:21:05 | 显示全部楼层
本帖最后由 wudijushi 于 2012-11-9 21:22 编辑

虽然目前用不着该功能,但界面看起来比较舒适,是htmlayout搞的?得看看源码

53

主题

216

回帖

1708

积分

四级会员

积分
1708
 楼主| 发表于 2012-11-9 21:28:35 | 显示全部楼层
wudijushi 发表于 2012-11-9 21:21
虽然目前用不着该功能,但界面看起来比较舒适,是htmlayout搞的?得看看源码

就套了个sharpskin皮肤而已...

52

主题

1272

回帖

7276

积分

荣誉会员

积分
7276
发表于 2012-11-9 21:37:35 | 显示全部楼层
谢谢分享~

1

主题

20

回帖

222

积分

二级会员

积分
222
发表于 2012-11-10 08:21:47 | 显示全部楼层
不错啊  支持下~

7

主题

293

回帖

1900

积分

新手入门

积分
1900
QQ
发表于 2012-11-10 08:37:37 | 显示全部楼层
谢谢分享!

8

主题

90

回帖

716

积分

三级会员

积分
716
发表于 2012-11-10 10:43:09 | 显示全部楼层
看看,感觉是很不错

0

主题

3

回帖

81

积分

一级会员

积分
81
发表于 2012-11-10 10:53:41 | 显示全部楼层
不错,

24

主题

37

回帖

403

积分

二级会员

积分
403
发表于 2012-11-10 18:06:52 | 显示全部楼层
给力~

12

主题

651

回帖

4023

积分

荣誉会员

子非魚、安知魚之樂

积分
4023
发表于 2012-11-10 19:24:49 | 显示全部楼层
感谢分享

6

主题

30

回帖

336

积分

二级会员

积分
336
发表于 2012-11-10 20:28:14 | 显示全部楼层
学习下!

0

主题

12

回帖

194

积分

一级会员

积分
194
发表于 2012-11-10 22:11:13 | 显示全部楼层
java log能解析不

0

主题

4

回帖

96

积分

一级会员

积分
96
发表于 2012-11-12 10:12:38 | 显示全部楼层
看下 很给力~~

0

主题

5

回帖

41

积分

新手入门

积分
41
发表于 2012-11-13 08:55:46 | 显示全部楼层
下载看看 、。。

3

主题

6

回帖

67

积分

一级会员

积分
67
发表于 2012-11-14 15:22:36 | 显示全部楼层
支持楼主l希望楼主多发精品好帖.....

25

主题

89

回帖

732

积分

三级会员

积分
732
发表于 2012-11-14 15:48:53 | 显示全部楼层

0

主题

3

回帖

27

积分

新手入门

积分
27
发表于 2012-12-2 16:22:25 | 显示全部楼层
不错,谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2024-3-1 09:17 , Processed in 0.069644 second(s), 27 queries .

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

快速回复 返回顶部 返回列表