DNN开发
DNN提供了很多基础的服务(Service),Event记录系统就是其中的一个。那如何使用这个Event系统呢?在深入细节之前,让我们先想想,在生活中,如果你要记录一个事件,你会怎么办呢?比如借别人钱了,你会用一个小纸片写上,“2008年5月27日,在商场借李四4000元钱,约定8月1日前还”
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的枚举作为类型描述,不同的类,比如登录、模块安装等等都提不同的枚举类型的事件类型,可以直接使用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述