你应该在哪里定期登录asp.net-mvc?你应该使用ELMAH吗?

时间:2011-07-11 02:12:01

标签: asp.net-mvc logging elmah

我想在从我的asp.net缓存中删除项目时开始记录,并且我想知道在哪里以及如何执行此操作。

我发现ELMAH建议用于应用程序范围的异常处理日志记录系统,但是它可以(并且应该)用于常规日志记录工具,如上例所示吗?

2 个答案:

答案 0 :(得分:9)

我认为你使用ELMAH和Log4Net(或NLog)。使用两者将获得最大的灵活性。我希望我现在可以进入极端的细节,但我想至少回应你并告诉你,使用BOTH是我经历过的最好的解决方案,也是我读过别人所做的。如果您需要解释等,请告诉我。

答案 1 :(得分:5)

我们曾经是一个纯粹的Log4Net商店,直到Log4net在很多场合停止为我们生产。为了避免这种情况发生,我们决定为整个应用程序实现ELMAH(即使是基本日志记录)。我们对结果感到高兴,因为我们的所有日志语句都出现在一个地方,并且没有更多的文本文件可以遍历(除非我们想要遍历XML文件)。我们让Log4Net再次进行了一次迭代,但最终发现它几乎没有用,并且已经完全从我们的应用程序中删除了它。

我可以看到为什么你可能想要为一个站点提供两个不同的日志框架,特别是因为ELMAH需要一个HttpContext才能发挥其全部潜力。但是,我们确实找到了一种在没有HttpContext的情况下将异常传递给ELMAH的方法:

        /// <summary>
        /// Main logger method that will log an exception and/or a message
        /// </summary>
        /// <param name="exception">Exception to log</param>
        /// <param name="message">Message to log</param>
        private static void Log(Exception exception, string message)
        {
                Error elmahError = exception != null ? new Error(exception) : new Error();

                if (!string.IsNullOrWhiteSpace(message))
                {
                    elmahError.Message = message;
                }

                Elmah.ErrorLog.GetDefault(null).Log(elmahError);             
        }

然后在您的web.config中,您只需指定applicationName

<elmah>
    <security allowRemoteAccess="1" />
    <errorLog name="ELMAHLogger" applicationName="xxx" type="Elmah.XmlFileErrorLog, Elmah" logPath="~/ELMAH_Production_Logs" />
  </elmah>

同样,我认为Log4Net是一个很好的日志框架,它已经为我们工作了很多年。我发现ELMAH在查找异常时更容易使用,上面的代码允许我们在我们的HttpContext可能无法使用的应用程序中的任何地方使用它。