Asp.net mvc 带有日志记录的MVC baseController是什么样子的?
我想为我的MVC3应用程序设置一个基本控制器。我的其他控制器将从中继承的东西。我想做的是实现日志记录。我看到了下面这个例子:Asp.net mvc 带有日志记录的MVC baseController是什么样子的?,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我想为我的MVC3应用程序设置一个基本控制器。我的其他控制器将从中继承的东西。我想做的是实现日志记录。我看到了下面这个例子: public class baseController : Controller { protected override void OnException(ExceptionContext filterContext) { filterContext.ExceptionHandled = true; this.V
public class baseController : Controller
{
protected override void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
this.View("Error").ExecuteResult(this.ControllerContext);
}
}
但我不知道该记录什么以及如何记录。有人能给我一些关于基本控制器中错误处理的建议吗。我希望有人能帮忙。多谢各位 如果要记录未处理的异常,最好在应用程序级别处理。ELMAH是一个很好的起点,或者只是使用内置的心跳处理
就日志记录而言,最好的办法是使用log4net之类的工具来处理细节 似乎您正在寻找某种基本级别的应用程序错误处理。为什么不在Global.asax文件中添加应用程序错误方法的定义呢。这将捕获应用程序中突然出现的任何未处理的异常(来自控制器、其他库或视图等) 下面是一个示例:将其添加到您的Global.asax:
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
//Do your logging here.
//Redirect to an appropriate error page.
}
如果您想知道要记录什么,那么在这个方法中您可以访问的异常对象中有很多信息。我通常编写一个类,将这些信息写入一个文本文件。下面是一个示例(在一个名为Log的类中)-它不是最全面的方法,我相信可以从exception对象中提取更多信息,但是:
public class Log
{
private StreamWriter _writer;
public void WriteErrorMessage(string errorMessage, string pageUrl, Exception e)
{
_writer = new StreamWriter("LOG_FILE_OUTPUT_PATH_HERE.txt", true);
StringBuilder fullError = new StringBuilder();
fullError.AppendLine("Error log: " + DateTime.Now);
fullError.AppendLine(errorMessage);
fullError.AppendLine("Error raised on: " + pageUrl);
fullError.AppendLine("Associated exception message: " + e.Message + "\n" + e.InnerException);
fullError.AppendLine("Exception class: " + e.GetType().ToString());
fullError.AppendLine("Exception source: " + e.Source.ToString());
fullError.AppendLine("Exception method: " + e.TargetSite.Name.ToString());
fullError.AppendLine();
_writer.WriteLine(fullError);
_writer.Flush();
_writer.Close();
}
}
然后,在应用程序_Error方法(我们在上面定义)中,只需调用:
new Log().WriteErrorMessage("Global error has occurred.", Request.Url.ToString(), exception);