首页 文章

如何在DNN 7中使用LoggerSource?

提问于
浏览
5

我一直在研究在我的DNN 7站点上实现日志记录 . 我希望有一个可配置的日志记录级别,例如log4net提供的级别 .

我试图按照说明集成DNN网站上的log4net,http://www.dnnsoftware.com/community-blog/cid/141723/Using-log4net-with-DotNetNuke . 添加引用和代码行后使用日志记录:

DnnLog.Info("My Logging Worked!");

该代码报告了一条警告:

'DotNetNuke.Instrumentation.DnnLog'已过时:'“由于性能不佳而在7.0.1中折旧,请使用LoggerSource.Instance”'

我很难找到有关正确做事方式的信息 . 似乎“DnnLog”已被类似的类替换为与log4net交互,称为“DnnLogger” . 使用此类(和“LoggerSource”类)的一个不同之处是使用静态方法不再完成日志记录 .

用于检索 Logger 实例的“GetLogger()”函数需要一些参数,我还没有找到任何描述适当用法的文档 . DNN源代码有很多例子 . 从这些示例看,适当的用法是提供当前类 . 在声明类“MyClass”的文件“MyClass.cs”中,看起来以下内容是正确的:

ILog logger = LoggerSource.Instance.GetLogger(typeof(MyClass));

要么

DnnLogger logger = DnnLogger.GetLogger("MyClass");

使用typeof()的第一行代码返回了什么 Logger ?我的意思是,这个 Logger 是否会使用为该站点配置的log4net设置?如果它没有使用log4net设置,保存的日志文件在哪里以及配置设置在哪里调整?我的书呆子想知道typeof()类参数究竟发生了什么,为什么要使用它?

如果第一个示例没有连接log4net(或允许可配置的易于使用的日志记录级别的东西),第二个选项是可行的方法吗?如果是这样,通过什么是合适的字符串? “MyClass”是我的猜测,但我无法证实 .

如果我完全偏离这里并且应该从另一个方向接近这个,请随时提出建议 .

非常感谢大家!

1 回答

  • 7

    我在DNN Software forums and got a quick answer上发布了同样的问题 . 解释并扩展答案:

    • 折旧类存在性能问题,因为日志记录是使用静态方法完成的 . 新样式使用非静态方法,因此每个页面或类都可以创建自己的 Logger 实例 . 这可以防止程序在发生同时发生日志请求时等待共享实例 .

    • ILog和DNNLogger都使用log4net配置 .

    • 将ILog与LoggerSource一起使用可以让您更接近根源,因此它有很大的不同 .

    • 获取对象进行日志记录的最佳方法是:

    ILog logger = LoggerSource.Instance.GetLogger(typeof(MyClass));
    
    • 传递类名有助于在读取日志文件时对错误信息进行上下文关联 . 使用该类时,日志文件将包含命名空间和类以及错误信息 .

    • 要使用LoggerSource和ILog类,需要以下using语句:

    using DotNetNuke.Instrumentation;
    

    希望此信息可以帮助任何想知道DNN 7中日志记录更改的人 .
    快乐的编码!

相关问题