DotNetNuke和错误日志记录



DotNetNuke是否提供任何内置的错误日志框架?我的客户端正在使用DotNetNuke,我没有看到全局错误日志框架。我看到下面的课上有一些try/catch正在使用它们。

namespace DotNetNuke.Services.Exceptions
{
    [StandardModule]
    public sealed class Exceptions
    {
        public static ExceptionInfo GetExceptionInfo(Exception e);
        public static void LogException(Exception exc);
        public static void LogException(ModuleLoadException exc);
        public static void LogException(PageLoadException exc);
        public static void LogException(SchedulerException exc);
        public static void LogException(SecurityException exc);
        public static void LogSearchException(SearchException exc);
        public static void ProcessModuleLoadException(Control ctrl, Exception exc);
        public static void ProcessModuleLoadException(PortalModuleBase objPortalModuleBase, Exception exc);
        public static void ProcessModuleLoadException(Control ctrl, Exception exc, bool DisplayErrorMessage);
        public static void ProcessModuleLoadException(PortalModuleBase objPortalModuleBase, Exception exc, bool DisplayErrorMessage);
        public static void ProcessModuleLoadException(string FriendlyMessage, Control ctrl, Exception exc);
        public static void ProcessModuleLoadException(string FriendlyMessage, Control ctrl, Exception exc, bool DisplayErrorMessage);
        public static void ProcessModuleLoadException(string FriendlyMessage, PortalModuleBase objPortalModuleBase, Exception exc, bool DisplayErrorMessage);
        public static void ProcessPageLoadException(Exception exc);
        public static void ProcessPageLoadException(Exception exc, string URL);
        public static void ProcessSchedulerException(Exception exc);
    }
}

Log4Net可用,但大多数模块使用DNN中的自定义异常类,该类将在EventLog表中存储"事件",您可以从Admin/Event Viewer页面访问包括错误在内的"事件"报告。

通常,在一个模块中,您会执行以下操作。

try
{
    //STUFF HERE
}
catch (Exception exc) //Module failed to load
{
    Exceptions.ProcessModuleLoadException(this, exc);
}

DNN包含log4net,请参阅这篇wiki文章:http://dnnsoftware.com/Wiki/Page/log4net-In-DotNetNuke

关于这一点的原始帖子已经发布很长时间了,在为自己做了一些研究后,我相信我找到了一个比公认答案更好、更新的资源。以下是关于如何设置Log4Net并将其集成到您的模块中的更多信息,http://www.dnnsoftware.com/community-blog/cid/141723/Using-log4net-with-DotNetNuke.

使用Log4Net方法的一个优点似乎是能够配置日志级别,以便更容易地调查和调试应用程序。这在环境之间移动应用程序时尤其有用。我在服务器上调试应用程序时使用了这个方法,因为我无法连接到进程并中断应用程序进行调试。我打开日志级别并使用日志中的信息。这可能是一种痛苦的调试方式,但在遇到困难时确实很有帮助。

在DNN 7中,这里提到的DnnLog类是折旧的,因此可能应该探索替代方案。

看起来自定义异常类适用于在所有情况下都需要记录的异常。我发现这篇稍旧的文章,如果需要记录自定义信息,它可能仍然相关,http://www.ifinity.com.au/Blog/EntryId/114/Creating-Exception-Logging-with-DotNetNuke.有些类需要更新,但整体技术看起来不错,更符合Chris的建议。只要稍微调整一下,这个例子就可以用来实现一个可配置的日志级别。

我的理解是您有以下选项:

  • 使用类异常记录错误
  • 要登录文件,请使用DnLogger或LoggerSource。请参阅LoggerSource应如何在DNN 7+中使用
  • 要在Admin Event Viewer中登录(这实际上使用了一个sql表),请使用EventLogController。请参阅打印到DotNetNuke事件日志/查看器

最新更新