搜索
aardio官方社区 门户 查看主题

Apache|Nginx日志分析工具

发布者: winner | 发布时间: 2012-11-9 17:54| 查看数: 12532| 评论数: 100|帖子模式

本帖最后由 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, 下载次数: 119)

评分

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

查看全部评分

最新评论

coder 发表于 2012-11-9 20:12:28

不错,

不错,
winner 发表于 2012-11-9 21:05:15

可以配合下面这个使用 用aardio开发了一个Nginx服务器日志切割工具 [url=http://bbs.aardio.com/thread-8200

可以配合下面这个使用

用aardio开发了一个Nginx服务器日志切割工具
http://bbs.aardio.com/thread-8200-1-1.html
wudijushi 发表于 2012-11-9 21:21:05

[i=s] 本帖最后由 wudijushi 于 2012-11-9 21:22 编辑 [/i] 虽然目前用不着该功能,但界面看起来比较舒适,是htmlayou

本帖最后由 wudijushi 于 2012-11-9 21:22 编辑

虽然目前用不着该功能,但界面看起来比较舒适,是htmlayout搞的?得看看源码
winner 发表于 2012-11-9 21:28:35

[quote][size=2][color=#999999]wudijushi 发表于 2012-11-9 21:21[/color] [url=forum.p

wudijushi 发表于 2012-11-9 21:21
虽然目前用不着该功能,但界面看起来比较舒适,是htmlayout搞的?得看看源码

就套了个sharpskin皮肤而已...
qqmmcc 发表于 2012-11-9 21:37:35

谢谢分享~

谢谢分享~
nihaomm 发表于 2012-11-10 08:21:47

不错啊 支持下~

不错啊  支持下~
nvt303 发表于 2012-11-10 08:37:37

谢谢分享!

谢谢分享!
lyz8 发表于 2012-11-10 10:43:09

看看,感觉是很不错

看看,感觉是很不错
buku 发表于 2012-11-10 10:53:41

不错,{:3_59:}

不错,
03128crz 发表于 2012-11-10 18:06:52

给力~

给力~
xauto 发表于 2012-11-10 19:24:49

{:victory:}感谢分享

感谢分享
weell 发表于 2012-11-10 20:28:14

学习下!

学习下!
lmzmem 发表于 2012-11-10 22:11:13

java log能解析不

java log能解析不
yz086 发表于 2012-11-12 10:12:38

看下 很给力~~

看下 很给力~~
音符 发表于 2012-11-13 08:55:46

下载看看 、。。

下载看看 、。。
蝸牛 发表于 2012-11-14 15:22:36

支持楼主l希望楼主多发精品好帖.....

支持楼主l希望楼主多发精品好帖.....
x876526966 发表于 2012-11-14 15:48:53

{:)}

建站无忧 发表于 2012-12-2 16:22:25

不错,谢谢楼主分享

不错,谢谢楼主分享

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

GMT+8, 2018-4-27 06:59 , Processed in 0.078125 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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