Event Log介紹
DNN提供了很多基礎的服務(Service),Event記錄系統就是其中的一個。如圖:
Event記錄系統可以記錄系統中發生的很多事情,如:
那如何使用這個Event系統呢?
在深入細節之前,讓我們先想想,在生活中,如果你要記錄一個事件,你會怎麼辦呢?比如借别人錢了,你會用一個小紙片寫上,“2008年5月27日,在商場借李四4000元錢,約定8月1日前還”
在系統中我們要記錄一個事件,同樣的,我們得指明這些東西:
- 事件的日期——2008年5月27日
- 事件的類型——借錢
- 事件的相關人——李四(當然,我自己也是相關人)
- 事件的備注——歸還日期
- 事件發生的地點——商場
我們指明了這些東西,存入資料庫,及添加了一個Event記錄。
那如何添加呢,DNN裡一個基本概念就是CBO(Custom Business Object)的概念,向資料庫裡添加、修改、删除一個對象,都要通過對象的Info類和Controller類。Event肯定是一個對象,那個應該有一個EventInfo類。DNN的服務方面的代碼都放在了Service命名空間下了,我們在這裡找一找,果然,參照左圖
在DNN的DotNetNuke.Services.Log.EventLog下,有一個LogInfo類。我們再來看看LogInfo類有什麼屬性,如下圖:
- 事件的日期——LogCreateDate、LogCreateDateNum
- 事件的類型——LogTypeKey
- 事件的相關人——LogUserName(LoguserID)
- 事件的備注——LogProperties
- 事件的地點——LogPortalID、LogPortalName、LogServerName
還有一些其它的屬性,用來記錄事件存儲的檔案等等。
這個時候我們可以想象如何添加一個Event記錄了,生成一個LogInfo,使用LogController添加進資料庫。
我們來看看DNN在使用者登入時是如何把使用者登入這個Event登入到系統裡面的。
代碼如下:
Private Shared Sub AddEventLog()Sub AddEventLog(ByVal portalId As Integer, ByVal username As String, ByVal userId As Integer, ByVal portalName As String, ByVal Ip As String, ByVal loginStatus As UserLoginStatus)
Dim objEventLog As New Services.Log.EventLog.EventLogController
' initialize log record
Dim objEventLogInfo As New Services.Log.EventLog.LogInfo
Dim objSecurity As New PortalSecurity
objEventLogInfo.AddProperty("IP", Ip)
objEventLogInfo.LogPortalID = portalId
objEventLogInfo.LogPortalName = portalName
objEventLogInfo.LogUserName = objSecurity.InputFilter(username, PortalSecurity.FilterFlag.NoScripting Or PortalSecurity.FilterFlag.NoAngleBrackets Or PortalSecurity.FilterFlag.NoMarkup)
objEventLogInfo.LogUserID = userId
' create log record
objEventLogInfo.LogTypeKey = loginStatus.ToString
objEventLog.AddLog(objEventLogInfo)
End Sub
第一步:生成一個EventLogController
Dim objEventLog As New Services.Log.EventLog.EventLogController
第二步:生成一個EventInfo,并填充相關屬性
Dim objEventLogInfo As New Services.Log.EventLog.LogInfo
Dim objSecurity As New PortalSecurity
objEventLogInfo.AddProperty("IP", Ip)
objEventLogInfo.LogPortalID = portalId
objEventLogInfo.LogPortalName = portalName
objEventLogInfo.LogUserName = objSecurity.InputFilter(username, PortalSecurity.FilterFlag.NoScripting Or PortalSecurity.FilterFlag.NoAngleBrackets Or PortalSecurity.FilterFlag.NoMarkup)
objEventLogInfo.LogUserID = userId
這裡要注意的一點是,LogInfo的AddProperty()函數可以允許我們添加自定義的記錄項。比如本例中的:
最後:制定Event類型,使用EventLogController添加進資料庫
objEventLogInfo.LogTypeKey = loginStatus.ToString
objEventLog.AddLog(objEventLogInfo)
LogTypeKey是一個String,是以可以接受DNN中各種Event的枚舉作為類型描述,不同的類,比如登入、子產品安裝等等都提不同的枚舉類型的事件類型,可以直接使用。