Log Parser 和 C# 打造网站访问统计分析系统

Log Parser(本地下载 微软网站下载)是微软公司出品的日志分析工具,它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Directory。它可以像使用 SQL 语句一样查询分析这些数据,甚至可以把分析结果以各种图表的形式展现出来。

Log Parser 的安装很简单,没有什么特别的,安装之后,可以在安装目录下找到 LogParser.chm 这个文件,该文件是 LogParser 的帮助文件,为英语语言。

我们简单介绍一下在命令提示符中如何使用 Log Parser。

LogParser.exe 为可执行文件,后跟一个使用 SQL 结构的语句参数进行查询。

C:\Program Files\Log Parser 2.2>LogParser "SELECT TOP 10 * FROM System ORDER BY RecordNumber DESC"

从系统日志(可以从事件查看器中找到)中,选出按 RecordNumber 逆序的前 10 条记录。RecordNumber 是 System 中的一个字段。

我们也可以生成图表:

C:\Program Files\Log Parser 2.2>LogParser "SELECT EventID, Count(*) as 出现次数 INTO Chart.gif FROM System GROUP BY EventID" -chartType:PieExploded3D -groupSize:500x350 -chartTitle:"事件分类"

上述代码中还加了其它参数来确定图表的类型、大小等,得到类似如下图表:

Log Parser 生成的图表

是不是非常的简单,而且很振奋人心,不过这些都不是我们介绍的重点,我们的重点是如何利用 C# 去执行 Log Parser。

 

 

通过 .NET Framework 的 COM interop (COM 交互操作)特性,可以很方便地在 .NET 应用程序中使用 Log Parser,.NET Framework 的 COM interop 是通过 Runtime Callable Wrappers (RCW) 来实现对 COM 的操作的,RCW 是 .NET 中的一个类。

我们用 Log Parser 和 C# 打造网站访问统计分析系统,就是用 C# 调用 Log Parser,利用 Log Parser 去分析 IIS 的日志文件。我们这里的日志文件是 W3C 格式的。

程序

我们建立一个 .cs 文件,引入:

using LogQuery = Interop.MSUtil.LogQueryClassClass;
using IISInputFormat = Interop.MSUtil.COMIISW3CInputContextClassClass;
using LogRecordSet = Interop.MSUtil.ILogRecordset;

类中关键代码如下:

LogQuery oLogQuery = new LogQuery();
IISInputFormat oIISInputFormat = new IISInputFormat();
string query = @"SELECT COUNT(DISTINCT c-ip) AS hits
                 FROM 'C:\WINDOWS\system32\Logfiles\W3SVC1\ex070820.log'
                 WHERE cs-uri-stem like '%.asp'
                 AND sc-status=200";
LogRecordSet oRecordSet = oLogQuery.Execute(query, oIISInputFormat);
if (!oRecordSet.atEnd())
{
    hits = (int)oRecordSet.getRecord().getValue("hits");
}
oRecordSet.close();

看得出来跟使用数据库没有多大区别,查询语句中 c-ip、cs-uri-stem、sc-status 等都是日志文件的字段,直接打开日志文件可以找到这些内容。

编译

程序就完成了,不过还不能直接运行,我们还要对它编译,我们这里是编译成 exe,当然您也可以把它编译成一个 DLL,供 ASP.NET 一类的文件调用。

需要两步,第一步:

C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\TlbImp.exe C:\Program Files\Log Parser 2.2\LogParser.dll /out:E:\Interop.MSUtil.dll

直接下载 Interop.MSUtil.dll

TlbImp 全称是 Type Library Importer,它是用于创建 RCW,它通常位于 .NET Framework 的 Bin 目录下。

如果您使用的是 Visual Studio 2005,也可以不使用命令提示符的方式,而在工程中直接导入。

第二步:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc /target:exe /reference:E:\Interop.MSUtil.dll /out:E:\logAnal.exe E:\logAnal.cs

logAnal.cs 是我们前面写的程序,logAnal.exe 是要生成的 exe 文件,Interop.MSUtil.dll 是前面生成的 DLL。

完成了

就是这么简单,没有什么复杂的,通过改变查询语句,可以实现多种统计。

posted @ 2008-11-20 11:34  h-hello  阅读(1332)  评论(0编辑  收藏  举报