一個簡易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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM