2011-03-19 4 views
1

MVC3 응용 프로그램의 기본 컨트롤러를 설정하고 싶습니다. 내 다른 컨트롤러가 상속 할 수있는 것. 내가 원하는 것은 로깅을 구현하는 것이다. 다음 예제를 보았습니다 :로깅 기능이있는 MVC baseController는 어떤 모습입니까?

public class baseController : Controller 
{ 

    protected override void OnException(ExceptionContext filterContext) 
    { 
     filterContext.ExceptionHandled = true; 
     this.View("Error").ExecuteResult(this.ControllerContext); 
    } 

} 

그러나 무엇을 기록하고 어떻게 기록하는지 잘 모르겠습니다. 누군가 기본 컨트롤러의 오류 처리에 대한 조언을 해 줄 수 있습니까? 누군가가 도울 수 있기를 바랍니다. 고맙습니다.

답변

0

처리되지 않은 예외를 기록하려면 응용 프로그램 수준에서 처리하는 것이 좋습니다. ELMAH는 시작하기에 좋은 장소이거나 내장 된 하트 비트 처리를 사용하기에 가장 좋은 곳입니다.

로깅 작업에있어 가장 좋은 방법은 log4net과 같은 것을 사용하여 세부 정보를 처리하는 것입니다.

2

일종의 기본 수준 응용 프로그램 오류 처리를 찾는 것처럼 보입니다. Global.asax 파일에서 Application_Error 메서드에 대한 정의를 추가하지 않는 것이 좋습니다. 이것은 (컨트롤러에서, 또는 다른 도서관이나 뷰 등) 응용 프로그램에서 돌발 모든 취소 처리 예외를 잡을 것입니다 여기에

는 예입니다 : 당신의 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. 
} 

하는 경우 무엇을 기록해야하는지에 대해 궁금해 할 때,이 메소드 내부에 접근 할 수있는 예외 객체 내에는 많은 정보가 있습니다. 보통이 정보 중 일부를 텍스트 파일에 쓰는 클래스를 작성합니다.

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

그런 다음함으로써 Application_Error 방법에 (우리가 정의 난 것이 가장 포괄적 인 방법 아니에요 그리고 더 많은 정보는 예외 객체에서 추출 할 수있는 확신하지만 - 여기 (로그라는 클래스에서) 예입니다 위 전화) :

new Log().WriteErrorMessage("Global error has occurred.", Request.Url.ToString(), exception); 
관련 문제