如何使用DNN中的事件记录服务


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()函数可以允许我们添加自定义的记录项。比如本例中的:

objEventLogInfo.AddProperty("IP", Ip)

  最后:制定Event类型,使用EventLogController添加进数据库

objEventLogInfo.LogTypeKey = loginStatus.ToString
  
objEventLog.AddLog(objEventLogInfo)

  LogTypeKey是一个String,所以可以接受DNN中各种Event的枚举作为类型描述,不同的类,比如登录、模块安装等等都提不同的枚举类型的事件类型,可以直接使用


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3