一个简易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>

源码下载地址:http://download.csdn.net/detail/dz45693/7183419

原文地址:https://www.cnblogs.com/majiang/p/3660743.html