一个简易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
一个简易Asp.net网站日志系统的更多相关文章
- 使用EF Code First搭建一个简易ASP.NET MVC网站,允许数据库迁移
本篇使用EF Code First搭建一个简易ASP.NET MVC 4网站,并允许数据库迁移. 创建一个ASP.NET MVC 4 网站. 在Models文件夹内创建Person类. public ...
- .NET 黑魔法 - asp.net core 日志系统
asp.net core 里如何记录日志呢? 这要从asp.net core的依赖注入说起,在asp.net core里的依赖注入真是无所不在,各种面向切面的接口与事件. 好吧,来点干货. 首先,我们 ...
- 用python 10min手写一个简易的实时内存监控系统
简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...
- [转]用python 10min手写一个简易的实时内存监控系统
简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...
- 快速搭建日志系统——ELK STACK
什么是ELK STACK ELK Stack是Elasticserach.Logstash.Kibana三种工具组合而成的一个日志解决方案.ELK可以将我们的系统日志.访问日志.运行日志.错误日志等进 ...
- 集中式日志系统 ELK 协议栈详解
简介 在我们日常生活中,我们经常需要回顾以前发生的一些事情:或者,当出现了一些问题的时候,可以从某些地方去查找原因,寻找发生问题的痕迹.无可避免需要用到文字的.图像的等等不同形式的记录.用计算机的术语 ...
- PowerJob 在线日志饱受好评的秘诀:小但实用的分布式日志系统
本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri HelloGitHub 推出的<讲解开源项目>系列. 项目地址: https://github.com/ ...
- AngularJs打造一个简易权限系统
AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...
- ASP.NET Core分布式日志系统ELK实战演练
一.ELK简介 ELK是Elasticsearch.Logstash和Kibana首字母的缩写.这三者均是开源软件,这三套开源工具组合起来形成了一套强大的集中式日志管理平台. • Elastics ...
随机推荐
- Android-多进程初识
Android-多进程初识 学习自 <Android开发艺术探索> https://baike.baidu.com/item/%E8%BF%9B%E7%A8%8B/382503?fr=al ...
- SQL Server密码爆破工具SQLdict
SQL Server密码爆破工具SQLdict SQL Server是Windows系统常用的数据库服务器.它广泛采用用户名和密码方式,进行身份认证.Kali Linux提供一款专用的数据库密码爆破工 ...
- 一个线上程序bug,由通用补数程序引起
下游发现接口可用率非100%,马上线上查看,发现数据在有些情况下通用补数的数据是空, 有20%的用户是没有相应偏好等的数据的,需要通用补数来补数,结果通用补数没有数据. 通用补数数据的检查报警时必须要 ...
- CSS选择符、属性继承、优先级算法以及CSS3新增伪类、新特性
CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些?CSS新增了哪些特性?下面我整理了一些,仅供参考. CSS 选择符: 1) id选择器(# myid) ...
- @Transactional导致AbstractRoutingDataSource动态数据源无法切换的解决办法
上午花了大半天排查一个多数据源主从切换的问题,记录一下: 背景: 项目的数据库采用了读写分离多数据源,采用AOP进行拦截,利用ThreadLocal及AbstractRoutingDataSource ...
- 让Win2008+IIS7+ASP.NET支持10万并发请求
今天下午17点左右,博客园博客站点出现这样的错误信息: Error Summary: HTTP Error 503.2 - Service Unavailable The serverRuntime@ ...
- Yarn使用简介
Yarn是由Facebook.Google.Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具 , 它主要是为了弥补 npm 的一些缺陷而出现的.和npm相比,它具有如下特点: 速 ...
- 通过WinAPI播放PCM声音
在Windows平台上,播放PCM声音使用的API通常有如下两种. waveOut and waveIn:传统的音频MMEAPI,也是使用的最多的 xAudio2:C++/COM API,主要针对游戏 ...
- 《Go学习笔记 . 雨痕》反射
一.类型(Type) 反射(reflect)让我们能在运行期探知对象的类型信息和内存结构,这从一定程度上弥(mi)补了静态语言在动态行为上的不足.同时,反射还是实现元编程的重要手段. 和 C 数据结构 ...
- delphi 结构体和TList的用法
type PRecord = ^TMyRec; TMyRec = record s: string[8]; i: integer; d: double;end;var MyL ...