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

  • 相关阅读:
    寒假补习记录_4
    寒假补习记录_3
    寒假补习记录_2
    寒假补习记录_1
    公文流转系统编程
    Javaweb编程
    转:在静态方法中访问类的实例成员
    Java字段初始化规律
    原码,反码,补码浅谈
    java第二节课课后
  • 原文地址:https://www.cnblogs.com/majiang/p/3660743.html
Copyright © 2020-2023  润新知