一个简易Asp.net网站日志系统
前不久在网站上看到了网站日志访问记录组件UserVisitLogsHelp开源了! 这篇博客感觉还不错,就把源码download了下来,学习一下,发现里面的代码书写和设计并不是很好,于是自己改了改。自己在测试中也发现了一点小问题,同时也记录出来。该组件实现原理很简单:主要利用IHttpModule接口并在Web.config中的HttpModule节点添加此组件的配置,考虑到性能和可移植性,数据库采用开源Sqlite,方便维护和数据采集。这里数据采集需要一个相应的配置类,结构如下:FileSource和DateSource两个属性共同决定sqllite文件名,DateSource 取值是day,month,year,表示每天、月、年一个数据库文件。比如我这里是month,生成的文件如下:ExcludeUrlRegex属性主要是设置需要排除url对应的正则表达式。很多时候我们并不需要记录css、js、图片等静态资源的访问日志。
在测试的时候 建议大家不要设置Password属性,不然在用sqllite管理工具打开数据库文件时出现错误信息。如我这里用SQLlite Administrator错误信息如下:整个web application必须部署到正式的IIS环境,千万不要使用IIS Express,如果你用IIS Express会出现如下错误。
记录的 Sqlite日志数据库 结构如下:
编号字段名称字段类型备注
1Idinteger自增序号(PK,Not Null)
2UserHostAddressvarchar(20)远程客户端的IP主机地址
3UserHostNamevarchar(20)远程客户端的DNS名称
4UrlAbsoluteUrivarchar(1600)当前请求的绝对URI
5PhysicalPathvarchar(500)当前请求的URL相对应的物理文件路径
6UserAgentvarchar(1000)客户端浏览器的原始用户代理信息
7HttpMethodvarchar(4)客户端使用的HTTP数据传输方法
8UserLanguagesvarchar(20)客户端语言首选项的排序字符
9UrlHostvarchar(100)客户端主机的实例名
10UrlPortvarchar(10)当前URI的端口号
11TotalBytesinteger当前输入流中的字节数
12ContentLengthinteger客户端发送的内容长度(以字节计)
13IsLocalvarchar(5)当前请求是否来自本地计算机
14BrowserTypevarchar(30)浏览器的名称和主(整数)版本号
15BrowserVersionvarchar(20)浏览器的完整版本号(包括整数和小数)
16BrowserPlatformvarchar(20)客户端使用的操作系统平台名称
17BrowserBetavarchar(5)浏览器是否为测试版
18BrowserActiveXControlsvarchar(5)浏览器是否支持ActiveX控件
19BrowserCookiesvarchar(5)浏览器是否支持Cookie
20BrowserCrawlervarchar(5)浏览器是否为Web爬行遍历搜索引擎
21BrowserJavaScriptvarchar(5)浏览器支持的EcmaScript主版本号
22BrowserSupportsXmlHttpvarchar(5)浏览器是否支持通过HTTP接收XML
23BrowserInputTypevarchar(30)浏览器支持的输入类型
24BrowserScreenPixelsWidthinteger浏览器显示的近似宽度(单位像素)
25BrowserScreenPixelsHeightinteger浏览器显示的近似高度(单位像素)
26UrlReferrerAbsoluteUrivarchar(1600)客户端上次请求(该请求链接当前的URL)的绝对URI
27UrlReferrerAbsoluteUriDecodevarchar(1600)对UrlReferrerAbsoluteUri字段进行zh-cn或utf-9解码
28UrlReferrerHostNamevarchar(100)客户端上次请求(该请求链接当前的URL)的DNS名称
29CanCombineFormsInDeckvarchar(5)浏览器是否支持包括多个窗口的卡片组
30IsMobileDevicevarchar(5)浏览器是否为已识别的移动设备
31MobileDeviceManufacturervarchar(30)已知移动设备制造商的名称
32MobileDeviceModelvarchar(30)已知移动设备的型号名
33NumberOfSoftkeysinteger移动设备上软键的数目
34ContentEncodingvarchar(10)内容字符的编码
35ScreenBitDepthinteger浏览器显示的近似深度(单位像素)
36Websitevarchar(100)访问Web站点
37WebCookiesvarchar(80)记录当前访客的惟一Cookies值
38VisitTimevarchar(20)当前请求访问时间
至于使用方式我想很简单,在系统根目录下创建一个WebSiteVisitConfig.xml 文件,内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<WebSiteVisitLog>
<WebSiteVisit>
<!--FileSource Automatic Generation of Database File year:one year month:every month day:every day None:Does not generate -->
<SQLiteConnectings FileSource="~/App_Data/HomeWeb" Password=""
DateSource="month" WebSite="" ExcludeUrlRegex=".*\.(js|css|png)"
DecodeUrl="" TextDecoding="utf-8" ExcludeUserAgentRegex=""
WebCookiesName="" WebCookiesExpires="3650"/>
</WebSiteVisit>
</WebSiteVisitLog>
同时修改web.config文件如下:<modules runAllManagedModulesForAllRequests="true"> <add name="WebSiteVisit" type="WebSiteVisitLog.WebSiteVisitHttpModule,WebSiteVisitLog"/> </modules>
源码下载地址:金山快盘附件:WebSiteVisitLog.rar(24.13MB)
页:
[1]