Asp.net mvc 带有日志记录的MVC baseController是什么样子的?

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

我想为我的MVC3应用程序设置一个基本控制器。我的其他控制器将从中继承的东西。我想做的是实现日志记录。我看到了下面这个例子:

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);