前不久在网站上看到了网站日志访问记录组件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

一个简易Asp.net网站日志系统的更多相关文章

  1. 使用EF Code First搭建一个简易ASP.NET MVC网站,允许数据库迁移

    本篇使用EF Code First搭建一个简易ASP.NET MVC 4网站,并允许数据库迁移. 创建一个ASP.NET MVC 4 网站. 在Models文件夹内创建Person类. public ...

  2. .NET 黑魔法 - asp.net core 日志系统

    asp.net core 里如何记录日志呢? 这要从asp.net core的依赖注入说起,在asp.net core里的依赖注入真是无所不在,各种面向切面的接口与事件. 好吧,来点干货. 首先,我们 ...

  3. 用python 10min手写一个简易的实时内存监控系统

    简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...

  4. [转]用python 10min手写一个简易的实时内存监控系统

    简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...

  5. 快速搭建日志系统——ELK STACK

    什么是ELK STACK ELK Stack是Elasticserach.Logstash.Kibana三种工具组合而成的一个日志解决方案.ELK可以将我们的系统日志.访问日志.运行日志.错误日志等进 ...

  6. 集中式日志系统 ELK 协议栈详解

    简介 在我们日常生活中,我们经常需要回顾以前发生的一些事情:或者,当出现了一些问题的时候,可以从某些地方去查找原因,寻找发生问题的痕迹.无可避免需要用到文字的.图像的等等不同形式的记录.用计算机的术语 ...

  7. PowerJob 在线日志饱受好评的秘诀:小但实用的分布式日志系统

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri HelloGitHub 推出的<讲解开源项目>系列. 项目地址: https://github.com/ ...

  8. AngularJs打造一个简易权限系统

    AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...

  9. ASP.NET Core分布式日志系统ELK实战演练

    一.ELK简介  ELK是Elasticsearch.Logstash和Kibana首字母的缩写.这三者均是开源软件,这三套开源工具组合起来形成了一套强大的集中式日志管理平台. •  Elastics ...

随机推荐

  1. Android-多进程初识

    Android-多进程初识 学习自 <Android开发艺术探索> https://baike.baidu.com/item/%E8%BF%9B%E7%A8%8B/382503?fr=al ...

  2. SQL Server密码爆破工具SQLdict

    SQL Server密码爆破工具SQLdict SQL Server是Windows系统常用的数据库服务器.它广泛采用用户名和密码方式,进行身份认证.Kali Linux提供一款专用的数据库密码爆破工 ...

  3. 一个线上程序bug,由通用补数程序引起

    下游发现接口可用率非100%,马上线上查看,发现数据在有些情况下通用补数的数据是空, 有20%的用户是没有相应偏好等的数据的,需要通用补数来补数,结果通用补数没有数据. 通用补数数据的检查报警时必须要 ...

  4. CSS选择符、属性继承、优先级算法以及CSS3新增伪类、新特性

    CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些?CSS新增了哪些特性?下面我整理了一些,仅供参考. CSS 选择符: 1)      id选择器(# myid) ...

  5. @Transactional导致AbstractRoutingDataSource动态数据源无法切换的解决办法

    上午花了大半天排查一个多数据源主从切换的问题,记录一下: 背景: 项目的数据库采用了读写分离多数据源,采用AOP进行拦截,利用ThreadLocal及AbstractRoutingDataSource ...

  6. 让Win2008+IIS7+ASP.NET支持10万并发请求

    今天下午17点左右,博客园博客站点出现这样的错误信息: Error Summary: HTTP Error 503.2 - Service Unavailable The serverRuntime@ ...

  7. Yarn使用简介

    Yarn是由Facebook.Google.Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具 , 它主要是为了弥补 npm 的一些缺陷而出现的.和npm相比,它具有如下特点: 速 ...

  8. 通过WinAPI播放PCM声音

    在Windows平台上,播放PCM声音使用的API通常有如下两种. waveOut and waveIn:传统的音频MMEAPI,也是使用的最多的 xAudio2:C++/COM API,主要针对游戏 ...

  9. 《Go学习笔记 . 雨痕》反射

    一.类型(Type) 反射(reflect)让我们能在运行期探知对象的类型信息和内存结构,这从一定程度上弥(mi)补了静态语言在动态行为上的不足.同时,反射还是实现元编程的重要手段. 和 C 数据结构 ...

  10. delphi 结构体和TList的用法

    type  PRecord = ^TMyRec;  TMyRec = record    s: string[8];    i: integer;    d: double;end;var   MyL ...