什么是最有效和高性能的ASP.NET日志记录解决方案?

时间:2009-03-17 19:40:15

标签: asp.net logging exception-logging

我想将日志记录添加到我从之前的开发人员继承的ASP.NET 2.0网站。应用程序只在它们发生时吐出异常,并且没有已执行的金融交易记录。

我一直在关注我过去使用的Log4net,以及NLog和BitFactory。我真正需要知道的是如何在我的应用程序中最好地实现日志框架,该框架在SharePoint中运行。我需要一些不会使应用程序陷入困境的东西。

ASP.NET是否有普遍接受的日志记录模式?您是如何在网站上实施日志记录的?

3 个答案:

答案 0 :(得分:4)

我在很多ASP.NET应用程序中使用的系统是ELMAH(错误记录模块和处理程序)。不知道它是否会提供你想要的所有功能,但我真正喜欢的是获取黄色死亡屏幕并在发生未处理的异常时通过电子邮件堆栈跟踪。

答案 1 :(得分:1)

您执行的任何日志记录都会比不记录日志慢。记录不是关于性能,而是关于可靠性和恢复。最好的日志框架是你虔诚使用的框架,最糟糕的是你不使用的框架。

我们在我们的应用程序中使用log4net,没有任何抱怨,也从未回头。有什么我想调整的东西吗?当然。但我们不是在日志记录业务,我们为客户编写应用程序,因此我们需要一个可靠的*日志系统,并且log4net适合。

话虽如此,我们将调试日志包装在检查调试日志中。 仅在核心位置我们超越了典型的if (log.isDebugEnabled)检查,并在每个if语句中添加了我们自己的静态变量检查。在我们真正关心性能的模块顶部(主要是我们的ORM或其他基础设施部分)我们有

#region Log4Net
const string c_EnableDebugLogging = "com.techsoftinc.BusinessObjectsCore.EnableDebugLogging";
static readonly bool _EnableDebugLogging = Convert.ToBoolean(ConfigurationManager.AppSettings[c_EnableDebugLogging] ?? "false");

static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

//Do we support ultrafast logging? See What is REALLY the FASTEST way of (not) logging? in http://logging.apache.org/log4net/release/faq.html
static bool debugLogging
{
   get { return _EnableDebugLogging && log.IsDebugEnabled; }
}
#endregion

然后当我们想要调试时(例如)

if (debugLogging)
   log.DebugFormat("Executing sql: {0}", sql);

如果_EnableDebugLogging为false,则JIT会将debugLogging函数折叠为false,然后删除整个if (debugLogging)语句,因为它永远不会成立。如果我们不需要它,JIT就会在地板上丢弃我们的调试日志。

* reliable ==在我们遇到的所有情况下都能很好地运作。在计算机科学意义上,可靠并不意味着真正可靠。

答案 2 :(得分:0)

我发现的最好的是log4.net。我们使用它来记录未处理的错误和调试ASP.NET。它很小,不会崩溃。我们在一个非常大的网站上使用它,我会再次使用它。

相关问题