gpt4 book ai didi

c# - DNN 7+应该如何使用LoggerSource?

转载 作者:太空狗 更新时间:2023-10-29 22:37:46 28 4
gpt4 key购买 nike

我一直在考虑在我的 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' is obsolete: '"Depreciated in 7.0.1 due to poor performance, use LoggerSource.Instance"'

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

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

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

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

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

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

如果我在这里完全偏离了轨道,应该从另一个方向来解决这个问题,请随时提出建议。

非常感谢大家!

最佳答案

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

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

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

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

    using DotNetNuke.Instrumentation;

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

关于c# - DNN 7+应该如何使用LoggerSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19189094/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com