1. 程式人生 > >一個簡易Asp.net網站日誌系統

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