当用户在我的网站上输入信息并遇到异常时,捕获该异常的最佳方法是什么。我想知道当异常发生时他们在表单上填写了什么。你是怎么处理的?你用过什么工具?我查看了ELMAH和log4net,目前正在尝试使用log4net来捕获这些信息。有关捕获表单字段的最佳方法的任何建议吗?
答案 0 :(得分:1)
您可以在Global.Asax
中注册应用程序错误处理程序,然后访问HttpContext.Current
以检索请求&形式价值。
protected void Application_Error(Object sender, EventArgs e)
{
HttpContext currentContext= HttpContext.Current;
// set the exception to the Context
Exception exception = currentContext.Server.GetLastError();
...
然后,您可以根据需要记录/保存此信息。
答案 1 :(得分:1)
在Global.asax.cs的Application_Error
中,您可以访问以下内容并进行记录。这就是我们所做的(删除了我们的细节)。
显然代替每个var whatever = ...
,你会LogInSomeWay(whatever)
。此代码仅演示将当前体验的每个重要部分分配给变量。
希望这有帮助。
<强>代码强>
void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
HttpContext context = HttpContext.Current;
bool requestAvailable = false;
try
{
if (context.Request != null)
{
requestAvailable = true;
}
}
catch{}
if (context != null) var serverName = context.Server.MachineName;
if (context != null && requestAvailable)
{
var referrer = context.Request.UrlReferrer != null ? context.Request.UrlReferrer.ToString() : "";
// If you use forms authentication and define your own principal, do some logging with it here
OurPrincipal user = OurContext.Current.LoggedOnPrincipal;
if (user != null && user.Identity != null && user.Identity.IsAuthenticated && user.Person != null)
{
var logonName = user.Person.LogonName;
var loginPersonName = user.Person.FirstName + " " + user.Person.LastName;
}
var userIP = context.Request.UserHostAddress;
var userDns = context.Request.UserHostName;
var userAgent = context.Request.UserAgent;
var exceptionText = ex.ToString();
foreach (string key in context.Request.ServerVariables.AllKeys)
{
var currentServerVarKey = key;
var currentServerVarValue = context.Request.ServerVariables[key];
}
if (context.Request.ServerVariables["REQUEST_METHOD"] == "POST"
&& context.Request.Form != null && context.Request.Form.AllKeys != null)
{
foreach (string key in context.Request.Form.AllKeys)
{
var currentFormKey = key;
var currentFormValue = context.Request.Form[key];
}
}
}
}
答案 2 :(得分:1)
在某些项目中,我们一直在使用ELMAH,但我不知道如何。 (虽然我的个人经历)在ELMAH中阅读过滤错误日志非常酷,但这就是它。
我有自己编写自己的错误处理程序的最佳经验。一种方法是订阅Application_Error
事件
另一种方法是编写自定义的HealthMonitoring提供程序。我在这里写过关于这个主题的文章:http://www.tomot.de/en-us/article/6/asp.net/how-to-create-a-custom-healthmonitoring-provider-that-sends-e-mails
也许有可能获得对抛出异常的表单的引用,并迭代每个Control / TextBox并获取它们的值。