我想向我从以前的开发人员那里继承的 ASP.NET 2.0 网站添加日志记录。该应用程序只是在发生异常时吐出异常,并且没有已执行的金融交易记录。
我一直在研究我过去使用过的 Log4net,以及 NLog 和 BitFactory。我真正需要知道的是如何在我的应用程序中最好地实现日志记录框架,该应用程序在 SharePoint 中运行。我需要一些不会让应用程序陷入困境的东西。
ASP.NET 是否存在普遍接受的日志记录模式?您是如何在您的网站中实现登录的?
我想向我从以前的开发人员那里继承的 ASP.NET 2.0 网站添加日志记录。该应用程序只是在发生异常时吐出异常,并且没有已执行的金融交易记录。
我一直在研究我过去使用过的 Log4net,以及 NLog 和 BitFactory。我真正需要知道的是如何在我的应用程序中最好地实现日志记录框架,该应用程序在 SharePoint 中运行。我需要一些不会让应用程序陷入困境的东西。
ASP.NET 是否存在普遍接受的日志记录模式?您是如何在您的网站中实现登录的?
我在很多 ASP.NET 应用程序中使用的系统是ELMAH(错误记录模块和处理程序)。不知道它是否会提供您想要的所有功能,但我真正喜欢它的是每当发生未处理的异常时通过电子邮件获取黄屏死机和堆栈跟踪。
你做的任何日志都会比不做日志要慢。日志记录与性能无关,它与可靠性和恢复有关。最好的日志框架是你虔诚地使用的,最差的是你不使用的。
我们在我们的应用程序中使用 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 为假,那么 JIT 会将 debugLogging 函数折叠为 a false
,然后删除整个if (debugLogging)
语句,因为它永远不会为真。如果我们不需要它,JIT 实际上就是将我们的调试日志放在地上。
*reliable == 适用于我们遇到的所有情况。可靠并不意味着计算机科学意义上的真正可靠。
我发现的最好的是 log4.net。我们使用它来记录未处理的错误和调试 ASP.NET。它很小,不会崩溃。我们在一个相当大的网站上使用它,我会再次使用它。