gpt4 book ai didi

asp.net - 在Global.asax Application_Error()中记录什么以及忽略什么?

转载 作者:行者123 更新时间:2023-12-03 07:42:11 25 4
gpt4 key购买 nike

当前,我具有以下代码段来处理Global.asax Application_Error()中的错误:

    var ex = server.GetLastError();
server.ClearError();
if (ex is HttpUnhandledException && ex.InnerException != null)
ex = ex.InnerException;
Trace.TraceError(ex.ToString());
// send some output to the user that they should contact support etc

它捕获所有错误,例如404错误(当用户键入不存在的.aspx URL时,或当浏览器要求提供诸如favicon.ico之类的内容并且将静态文件请求设置为通过管道时)。这样做有两个问题:不应记录该错误(日志中充满了无用的404错误),并且应发送回原始HTTP代码(否则搜索引擎可能会索引错误页面等)。

您将如何决定在此处记录什么和忽略什么?基本上,我想包括指示错误的应用程序/业务错误,并忽略“正常” HTTP错误。我也不只是想排除404错误,还有403,还有谁知道。

最佳答案

您的方法很好:您记录了未处理的错误。这样做的目的是清除错误。人类无法避免错误,但是我们可以快速修复它们。

首先记录所有错误。然后,将单个错误或您了解的错误类别列入黑名单是无用的。在几次迭代中,您将获得一个相当干净的日志。

删除所有不可操作的内容。 例如,您的网站将具有执行疯狂请求的机器人,等等。无需采取任何措施,因此您可以将它们从日志中删除。

我建议您也将看似无用的错误记录到补充日志文件中,以便您可以不时滚动浏览以确保一切正常。

您特别想知道通常无害的错误的频率。每天三个僵局对您来说可能很酷,但300个僵局可能太多了。

我将概述您的全局错误处理程序可能包含的内容:

static bool IsExceptionIgnored(Exception exception)
{
if (exception == null) throw new ArgumentNullException("exception");

var nestedExceptions = exception.GetExceptionChain();
return nestedExceptions.Any(ex =>
ex is ViewStateException ||
ex.Message.Contains("Timeout") ||
ex.Message.StartsWith("Invalid viewstate") ||
ex.Message.Contains("potentially dangerous") ||
ex.Message.Contains("The remote host closed the connection") ||
ex.Message.Contains("System.Web.UI.ViewStateException: Invalid viewstate") ||
ex.Message.Contains("System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError") ||
ex.Message.Contains("0x80070032") ||
(ex is HttpException && ((HttpException)ex).GetHttpCode() == 404) ||
ex is ThreadAbortException);
}
public static IEnumerable<Exception> GetExceptionChain(this Exception exception)
{
if (exception == null) throw new ArgumentNullException("exception");

for (var current = exception; current != null; current = current.InnerException)
yield return current;
}

关于asp.net - 在Global.asax Application_Error()中记录什么以及忽略什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19376795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com