我想在从我的asp.net缓存中删除项目时开始记录,并且我想知道在哪里以及如何执行此操作。
我发现ELMAH建议用于应用程序范围的异常处理日志记录系统,但是它可以(并且应该)用于常规日志记录工具,如上例所示吗?
答案 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可能无法使用的应用程序中的任何地方使用它。