1. 다음 정보를 포함해야 하는 xml을 디자인합니다.
1. 날짜/시간: 오류/예외가 발생한 날짜 및 시간
2. 파일명 : 오류/예외가 발생한 파일명
3. 클래스 이름: 오류/예외가 발생한 클래스 이름
4. Methodname: 오류/예외가 발생한 메소드 이름
5. Errormethod: 오류 코드를 포함하는 함수 이름
6. 메시지: 오류/예외 정보
7. 오류 내용 : 오류/예외 내용
8. IP: 클라이언트 IP 주소
9. URL: 오류가 발생한 URL
데모XML:
데모XML
<?xml version="1.0" 인코딩="utf-8"?>
<오류 로그>
<오류>
<datetime>날짜시간</datetime>
<파일 이름>파일 이름</파일 이름>
<클래스명>클래스명</클래스명>
<방법 이름>방법 이름</방법 이름>
<errormethod>오류 방법</errormethod>
<messsage>오류 메시지</messsage>
<errordetails>세부정보는 여기에 표시됩니다</errordetails>
<IP>IP 주소</IP>
<url>URL</url>
</error>
</errorlog>
2. 오류 처리 클래스인 errorHandler.cs를 디자인합니다. 내부의 WriteError 메서드에는 Exception과 FileName이라는 두 가지 매개 변수가 필요합니다.
오류 처리기.cs
시스템 사용;
System.Collections.Generic을 사용합니다.
System.Text 사용;
System.Xml 사용;
System.Reflection 사용;
System.Diagnostics 사용;
네임스페이스 code_center
{
공개 클래스 errorHandler
{
문자열 _strErrorMessage, _strDetails, _strClassName, _strMethodName;
DateTime _dtOccuranceTime = 새로운 DateTime();
공개 오류 핸들러()
{
}
공개 errorHandler(DateTime 시간, 문자열 className, 문자열 methodName,
문자열 오류 메시지, 문자열 세부 정보)
{
_dtOccuranceTime = 시간;
_strClassName = 클래스이름;
_strDetails = 세부정보;
_strErrorMessage = 오류메시지;
_strMethodName = 메소드이름;
}
public static void WriteError(예외예외)
{
WriteError(예, "");
}
공개 정적 무효 WriteError(예외 예, 문자열 파일 이름)
{
XmlDocument doc = new XmlDocument();
문자열 strRootPath =
System.Configuration.ConfigurationManager.AppSettings["logfilepath"].ToString();
문자열 xmlPath = System.Web.HttpContext.Current.Server.MapPath(strRootPath);
doc.Load(@xmlPath);
XmlNode newXMLNode, oldXMLNode;
oldXMLNode = doc.ChildNodes[1].ChildNodes[0];
newXMLNode = oldXMLNode.CloneNode(true);
StackTrace stackTrace = 새로운 StackTrace();
StackFrame stackFrame = stackTrace.GetFrame(1);
MethodBase methodBase = stackFrame.GetMethod();
newXMLNode.ChildNodes[0].InnerText = DateTime.Now.ToString();
newXMLNode.ChildNodes[1].InnerText = 파일 이름;
newXMLNode.ChildNodes[2].InnerText = methodBase.DeclaringType.FullName;
newXMLNode.ChildNodes[3].InnerText = methodBase.Name;
newXMLNode.ChildNodes[4].InnerText = ex.TargetSite.Name;
newXMLNode.ChildNodes[5].InnerText = ex.Message;
newXMLNode.ChildNodes[6].InnerText = ex.StackTrace;
newXMLNode.ChildNodes[7].InnerText = System.Web.HttpContext.Current.Request.UserHostAddress;
newXMLNode.ChildNodes[8].InnerText = System.Web.HttpContext.Current.Request.Url.OriginalString;
doc.ChildNodes[1].AppendChild(newXMLNode);
doc.Save(@xmlPath);
doc.RemoveAll();
}
}
}
3. Web.config에 추가합니다.
<앱 설정>
<키 추가="logfilepath" 값="~/errorHandling/errorlog.xml"/>
</app설정>
4. 테스트: 웹사이트에 테스트 코드 두 개를 추가하세요.
1. Page_Load에서:
페이지_로드
공개 부분 클래스 _Default : System.Web.UI.Page
{
protected void Page_Load(개체 전송자, EventArgs e)
{
노력하다
{
throw new Exception("사용자 정의 오류");
}
잡기 (예외예외)
{
Response.Write(ex.메시지);
kirin.errorHandler.WriteError(ex, "Default.aspx.cs");
}
}
}
2. Application_Error에 다음을 추가합니다.
void Application_Error(객체 전송자, EventArgs e)
{
code_center.errorHandler.WriteError(Server.GetLastError().GetBaseException(),
"글로벌.asax");
}
3. Page_Load 예외 결과:
오류XML
<오류>
<날짜시간>2010-1-29 9:29:24</날짜시간>
<파일 이름>Default.aspx.vb</파일 이름>
<classname>kirin._Default</classname>
<메서드 이름>페이지_로드</메서드 이름>
<errormethod>페이지_로드</errormethod>
<messsage>사용자 정의 오류</messsage>
<errordetails> kirin._Default.Page_Load(Object sender, EventArgs e) 위치 C:Demokirin_code_centerkirinDefault.aspx.cs: 줄 번호 16</errordetails>
<IP>127.0.0.1</IP>
<url>http://localhost:2192/default.aspx</url>
</error>
5. 전체 코드:/Files/zhuqil/kirin_errorHandler.rar
저자: Zhu Qilin 출처: http://zhuqil.cnblogs.com
이 글의 저작권은 글쓴이에게 있으며, 재인쇄는 환영합니다. 단, 이 글은 글쓴이의 동의 없이 그대로 유지되어야 하며, 그렇지 않은 경우 원문에 대한 링크를 글 페이지의 눈에 띄는 위치에 제공해야 합니다. 법적 책임을 추구할 권리가 있습니다.