5

我一直在考虑在我的 DNN 7+ 站点上实现日志记录。我想要一个可配置的日志级别,例如 log4net 提供的级别。

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

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

该代码报告了一条警告,内容如下:

'DotNetNuke.Instrumentation.DnnLog' 已过时:'"由于性能不佳,在 7.0.1 中已弃用,请使用 LoggerSource.Instance"'

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

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

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

或者

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

使用 typeof() 的第一行代码返回什么记录器?我的意思是,这个记录器会使用为站点配置的 log4net 设置吗?如果不使用 log4net 设置,日志文件保存在哪里,配置设置在哪里调整?我的书呆子想知道 typeof() 类参数到底发生了什么,为什么要使用它?

如果第一个示例不与 log4net 连接(或允许可配置的易于使用的日志记录级别),那么第二个选项是要走的路吗?如果是这样,要传递的适当字符串是什么?“MyClass”是我的猜测,但我无法确认。

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

非常感谢大家!

4

1 回答 1

8

我在DNN 软件论坛上发布了同样的问题并得到了快速回答。解释和扩展该答案:

  • 折旧的类存在性能问题,因为日志记录是使用静态方法完成的。新样式使用非静态方法,因此每个页面或类都可以创建自己的记录器实例。这可以防止程序在同时发生日志请求时等待共享实例。
  • ILog 和 DNNLogger 都使用 log4net 配置。
  • 将 ILog 与 LoggerSource 一起使用可以让您更接近根源,因此它比 DNNLogger 更好用,但没有太大区别。
  • 获取记录对象的最佳方法是:

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

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

    using DotNetNuke.Instrumentation;
    

希望此信息对任何想了解 DNN 7 中的日志记录更改的人有所帮助。
快乐编码!

于 2013-10-08T01:28:38.567 回答