對於網站或系統的用戶訪問日志商業產品有谷歌統計、百度統計、量子統計等,這些產品優點是功能強大,缺點是可定制性相對較差,難以滿足個性化的需求。本文介紹一種基於定義代碼方式記錄SharePoint網站或系統的用戶訪問日志,用戶訪問日志的組件復用本人兩年多前為學位論文基於C#開發的用戶訪問日志,該組件實現原理很簡單:主要利用IHttpModule接口並在Web.config中的HttpModule節點添加此組件的配置,考慮到性能和可移植性,數據庫采用開源Sqlite,方便維護和數據采集。具體實現步驟如下:
1.利用該用戶訪問日志組件如果是.net開發的網站,一種方式可以直接在網站的Web.config中HttpModule節點中添加,另一種是專門建立一個用戶訪問日志站點,利用該站點就可以記錄任何網站的訪問日志(無論是.Net、PHP、Java等),主要是利用一段嵌入的JS代碼就可以,本質方法同商業級的產品相同,考慮到性能和獨立性,本文使用后一種方法。
2.在需要統計的Sharepoint頁面加入兩段JS代碼,一段JS主要用戶獲取當前登錄的用戶信息,另一段是用於記錄訪問日志。
3.利用SSIS工具,自動把用戶訪問日志數據庫(Sqlite)導入到日志數據倉庫中(SQL SERVER),開發一個用於Url解編碼的SQL CLR。
4.利用SSRS工具,開發一個用戶訪問日志的報表並部署到Sharepoint網站中以供查詢。
比如要在excelservicesample.aspx增加日志訪問記錄功能,可以用Sharepoint Designer進行編輯,如下圖:
編輯excelservicesample.aspx,加入日志訪問JS代碼如下:
<script type="text/javascript" > SP.SOD.executeOrDelayUntilScriptLoaded(runMyCode, "SP.js"); var currentUser = null; var currentUserTitle=null; function runMyCode() { var ctx = new SP.ClientContext.get_current(); var web = ctx.get_web(); ctx.load(web); var user = web.get_currentUser(); user.retrieve(); ctx.executeQueryAsync( function () { //only in the success case you can work with user login
currentUser= user.get_loginName(); currentUserTitle = user.get_title(); document.getElementById("randimg").src="http://10.30.99.118:8081/Default.aspx?UserName=" +currentUser+"&UserTitle="+currentUserTitle; }, function (data) { //notify the failure
}); } </script>
<img id="randimg" name="randimg" src="" style="width:0;height:0;" />
保存並發布,如下圖:
訪問該頁面,測試一下訪問日志是否已被記錄,如下圖:
如果記錄成功,將在日志訪問記錄站點自動創建相應的日志數據庫,如下圖:
可以在VS中連接此數據庫看看是否已記錄,如下圖:
可以在UrlAbsoluteUri看到,在JS的URL已記錄,如下圖:
可以在UrlReferrerAbsoluteUri看到,真正的訪問頁面Url,如下圖:
搭建一個日志訪問記錄網站,如下圖:
再測試一個記錄頁面,比如要在default.aspx增加日志訪問記錄功能,可以用Sharepoint Designer進行編輯,增加JS代碼,如下圖:
打開default.aspx,測試訪問日志是否已被記錄,如下圖:
在VS查看日志數據庫,Default頁面的日志已被記錄,如下圖:
開發一個用於URL編節目的SQL CLR函數:SqlServerProject,並在SQL SERVER進行注冊:
exec sp_changedbowner 'sa' go --啟用數據庫CLR支持 EXEC sp_configure 'show advanced options','1'; go reconfigure; go EXEC sp_configure 'clr enabled','1' go --更改數據庫信任模式(為正確添加到程序集) Alter Database 數據庫名 SET TRUSTWORTHY ON GO CREATE assembly [system.web] from 'C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\system.web.dll' with permission_set=unsafe go CREATE assembly SQL_CLR_Url from 'D:\SqlServerProject\SqlServerProject.dll' with permission_set=unsafe go CREATE FUNCTION [dbo].[SqlUrlDecode](@urlstr nvarchar(4000)) RETURNS nvarchar(4000) AS EXTERNAL NAME SQL_CLR_Url.UserDefinedFunctions.SqlUrlDecode GO CREATE FUNCTION [dbo].[SqlUrlEncode](@urlstr nvarchar(4000)) RETURNS nvarchar(4000) AS EXTERNAL NAME SQL_CLR_Url.UserDefinedFunctions.SqlUrlEncode GO
執行成功,如下圖:
開發一個日志訪問統計報表,如下圖:
點擊可以查看日志明細,如下圖:
經過以上步驟,就簡單實現了Sharepoint網站或系統的用戶訪問日志功能,可以根據具體需求進行擴展,以符合個性化的需求。
本人的日志訪問記錄組件已開源,歡迎訪問下載:http://uservisitlogshelp.codeplex.com/
本博客為軟件人生原創,歡迎轉載,轉載請標明出處:http://www.cnblogs.com/nbpowerboy/archive/2013/06/12/3133169.html 。演繹或用於商業目的,但是必須保留本文的署名軟件人生(包含鏈接)。如您有任何疑問或者授權方面的協商,請給我留言。SharePoint商業智能技術QQ群:140668362,.Net技術交流QQ群:195516928,歡迎各位加入交流。 |