目前我按如下方式记录例外情况 -
public ActionResult Login()
{
try
{
throw new Exception("test");
}
catch (Exception ex)
{
LogException(ex);
}
return View();
}
我可以清楚地看到&有关此LogException()
方法的异常的详细信息。见下文 -
Created on: 27-Dec-2016, 06.34.33 PM
Type: System.Exception
Error Description: test
Source File: ...\Controllers\LoginController.cs
Method: Login
Line: 20
Column: 17
我在 -
中尝试了相同的方法public class MyCustomAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
Exception ex = filterContext.Exception;
LogException(ex)
}
}
public class MyCustomAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
Exception ex = filterContext.Exception;
LogException(ex)
}
}
我也试过重载OnException方法 -
public abstract class BaseController : Controller
{
public BaseController() {}
protected override void OnException(ExceptionContext filterContext)
{
Exception ex = filterContext.Exception;
filterContext.ExceptionHandled = true;
LogException(ex);
}
}
在所有三个重大案例中,我都没有得到有关源文件,方法,行和列的信息
Created on: 27-Dec-2016, 06.44.45 PM
Type: System.Exception
Error Description: test
Source File:
Method: <BeginInvokeAction>b__1e
Line: 0
Column: 0
这是我记录异常的方法 -
public static void Create(Exception exception, String rootDirectoryPath)
{
try
{
StackTrace st = new StackTrace(exception, true);
StackFrame frame = st.GetFrame(st.FrameCount - 1);
string fileName = frame.GetFileName();
string methodName = frame.GetMethod().Name;
int line = frame.GetFileLineNumber();
int col = frame.GetFileColumnNumber();
//Other code .....
}
catch (Exception)
{
//do nothing.
}
}
我的问题是,是否可以从这三种情况中检索源文件,方法,行和列信息?
我不想每次都写try .. catch..
来处理异常。
我听说过ELMAH&amp; log4net的。但不确定这些图书馆是否能够从例外中提供我想要的信息。
很抱歉这个问题很长。
答案 0 :(得分:1)
我是Coderr的作者,负责跟踪您的例外情况。
您的解决方案的问题是异常过滤器(以及ASP.NET框架调用来调用它)将成为堆栈跟踪的一部分,因此从堆栈跟踪对象获取帧将不起作用。
另请注意,如果您将网站投入生产时未包含.PDB文件,则无法获得文件编号。
最常见的方法是记录exception.ToString()
,其中包含堆栈跟踪中的行号(如果有PDB文件)。
为什么要使用自定义方法?
答案 1 :(得分:0)
你正在重新发明轮子,因为ELMAH可以很好地完成工作。你试试看了吗?只需一个Nuget包和一些完全设置的配置。
您可以从Scot Hanselman或read the tutorial了解更多相关信息。