Advertisement

一个简易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日志数据库 结构如下:

编号 字段名称 字段类型 备注
1 Id integer 自增序号(PK,Not Null)
2 UserHostAddress varchar(20) 远程客户端的IP主机地址
3 UserHostName varchar(20) 远程客户端的DNS名称
4 UrlAbsoluteUri varchar(1600) 当前请求的绝对URI
5 PhysicalPath varchar(500) 当前请求的URL相对应的物理文件路径
6 UserAgent varchar(1000) 客户端浏览器的原始用户代理信息
7 HttpMethod varchar(4) 客户端使用的HTTP数据传输方法
8 UserLanguages varchar(20) 客户端语言首选项的排序字符
9 UrlHost varchar(100) 客户端主机的实例名
10 UrlPort varchar(10) 当前URI的端口号
11 TotalBytes integer 当前输入流中的字节数
12 ContentLength integer 客户端发送的内容长度(以字节计)
13 IsLocal varchar(5) 当前请求是否来自本地计算机
14 BrowserType varchar(30) 浏览器的名称和主(整数)版本号
15 BrowserVersion varchar(20) 浏览器的完整版本号(包括整数和小数)
16 BrowserPlatform varchar(20) 客户端使用的操作系统平台名称
17 BrowserBeta varchar(5) 浏览器是否为测试版
18 BrowserActiveXControls varchar(5) 浏览器是否支持ActiveX控件
19 BrowserCookies varchar(5) 浏览器是否支持Cookie
20 BrowserCrawler varchar(5) 浏览器是否为Web爬行遍历搜索引擎
21 BrowserJavaScript varchar(5) 浏览器支持的EcmaScript主版本号
22 BrowserSupportsXmlHttp varchar(5) 浏览器是否支持通过HTTP接收XML
23 BrowserInputType varchar(30) 浏览器支持的输入类型
24 BrowserScreenPixelsWidth integer 浏览器显示的近似宽度(单位像素)
25 BrowserScreenPixelsHeight integer 浏览器显示的近似高度(单位像素)
26 UrlReferrerAbsoluteUri varchar(1600) 客户端上次请求(该请求链接当前的URL)的绝对URI
27 UrlReferrerAbsoluteUriDecode varchar(1600) 对UrlReferrerAbsoluteUri字段进行zh-cn或utf-9解码
28 UrlReferrerHostName varchar(100) 客户端上次请求(该请求链接当前的URL)的DNS名称
29 CanCombineFormsInDeck varchar(5) 浏览器是否支持包括多个窗口的卡片组
30 IsMobileDevice varchar(5) 浏览器是否为已识别的移动设备
31 MobileDeviceManufacturer varchar(30) 已知移动设备制造商的名称
32 MobileDeviceModel varchar(30) 已知移动设备的型号名
33 NumberOfSoftkeys integer 移动设备上软键的数目
34 ContentEncoding varchar(10) 内容字符的编码
35 ScreenBitDepth integer 浏览器显示的近似深度(单位像素)
36 Website varchar(100) 访问Web站点
37 WebCookies varchar(80) 记录当前访客的惟一Cookies值
38 VisitTime varchar(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>

源码下载地址:

全部评论 (0)

还没有任何评论哟~