代码之家  ›  专栏  ›  技术社区  ›  Robert S.

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

  •  1
  • Robert S.  · 技术社区  · 15 年前

    我想将日志添加到从以前的开发人员继承的ASP.NET 2.0网站。应用程序只会在异常发生时发出异常,并且没有执行过的财务交易记录。

    我一直在看log4net,这是我过去使用过的,以及nlog和bitforce。我真正需要知道的是如何在我的应用程序中最好地实现一个日志框架,它运行在SharePoint内部。我需要一些不妨碍申请的东西。

    ASP.NET是否有公认的日志记录模式?您是如何实现登录您的网站的?

    3 回复  |  直到 15 年前
        1
  •  4
  •   TheTXI    15 年前

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

        2
  •  1
  •   Walden Leverich    15 年前

    您所做的任何日志记录都将比不进行日志记录慢。日志记录与性能无关,它与可靠性和恢复有关。最好的日志框架是认真使用的,最糟糕的是不使用的。

    我们在我们的应用程序中使用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);
    

    如果启用debugging为false,则JIT将debugging函数折叠为 false 然后移除整个 if (debugLogging) 因为它永远不可能是真的。如果我们不需要的话,JIT实际上是将调试日志放到了地板上。

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

        3
  •  0
  •   Jef    15 年前

    我找到的最好的是log4.net。我们使用它来记录未处理的错误和调试ASP.NET。它很小,不会坠毁。我们在一个相当大的网站上使用它,我会再次使用它。