2007/07/08

ASP 오류를 이벤트로그에 기록

IIS 웹서버에서 Asp 처리시에는 기본적인 몇가지 스크립트 처리오류에 대해서 이벤트로그에 기록을 합니다. 



ASP.NET 1.0 에서도 몇가지 밖엔 기록을 하지 않습니다만, ASP.NET 2.0 에서 거의 대부분의 예외에 대해서 이벤트로그에 기록을 해줍니다.



그러나 그런 오류는 시스템에 다소 위험도가 높은 몇가지 스크립트 오류를 기록하는데요, 다음 메타베이스 설정값 변경을 통해서 보다 많은 오류를 이벤트로그에 기록할수 있습니다.

물론, IIS 로그파일에서 오류가 난 페이지를 추출할수 있습니다. 이미 사용을 많이 하는 관리자들이 있는데요, 바로 로그파서 입니다.

로그파서에 대한 내용은 http://www.serverinfo.pe.kr/TipnTech.aspx?Seq=284  포스트를 참고해보시구요.

위와 같은 로그파서는 명령창 기반인것과, SQL 쿼리와 같은 쿼리 명령어도 알고 있어야 합니다. 그래서 손쉽게 오류가 발생한 내역만 볼수 있는 방법이 이벤트로그에 오류로그를 기록하는 것입니다.

물론 웹서버에서 오류가 많이 난다면 그리 추천할만한 방법은 아닙니다.^^ IIS 로그파일은 순차로깅 방식이라 로그파일 기록에 따른 리소스 부담이 적은 편이나, 이벤트로그에 기록하는 것은 그 보다는 몇배 이상의 리소스를 소모한 다는 것입니다.


그럼 메타베이스 값중 어떤것을 설정해 줘야 하는지 알아 보도록 하죠.^^

이벤트로그를 남기기 위해서는 두가지 키에 대해서 설정을 해줘야 하는데요. AspErrorsToNTLog 와 AspLogsErrorRequests 입니다.

AspErrorsToNTLog 메타베이스 속성

AspErrorsToNTLog 속성은 Windows 이벤트 로그에 기록할 ASP 오류를 지정합니다. 기본적으로 ASP 오류는 클라이언트 브라우저와 IIS 로그 파일에 기록됩니다.

AspLogErrorRequests 메타베이스 속성

AspLogErrorRequests 속성은 웹 서버에서 Windows 이벤트 로그의 응용 프로그램 섹션에 ASP 오류를 기록하는지 여부를 제어합니다. ASP 오류는 기본적으로 클라이언트 브라우저와 IIS 로그 파일에 기록됩니다.


위 2가지 값은 서로 다음과 상관관계가 있습니다.

-

AspLogErrorRequestsFALSE로 설정되어 있는 경우 AspErrorsToNTLog 값에 관계없이 ASP 오류가 Windows 이벤트 로그에 기록되지 않습니다.

-

AspLogErrorRequestsTRUE로 설정되어 있고 IIS에서 IIS 로그 파일에 항목을 기록할 수 없는 경우 AspErrorsToNTLog 값에 관계없이 항목이 Windows 이벤트 로그에 경고로 기록됩니다.

-

AspLogErrorRequestsTRUE로 설정되어 있고 AspErrorsToNTLogFALSE로 설정되어 있는 경우 심각한 ASP 오류만 Windows 이벤트 로그에 전달됩니다. 심각한 ASP 오류는 번호 100, 101, 102, 103, 104, 105, 106, 107, 115, 190, 191, 192, 193, 194, 240, 241 및 242입니다.

-

AspLogErrorRequestsTRUE로 설정되어 있고 AspErrorsToNTLogTRUE로 설정되어 있는 경우 모든 ASP 오류가 Windows 이벤트 로그에 기록됩니다.



위 2개의 값 설정은 메타베이스 익스플로러나, adsutil.vbs 을 이용해서 설정하면 됩니다. 

adsutil set W3SVC/AspErrorsToNTLog  true
adsutil set W3SVC/AspLogErrorRequests  true

Vbscript 는 다음과 같습니다.

Set IIsWebVirtualDirObj = GetObject("IIS://localhost/W3SVC/1/Root")

IIsWebVirtualDirObj.AspErrorsToNTLog = true
IIsWebVirtualDirObj.Put "AspLogErrorRequests", true
IIsWebVirtualDirObj.SetInfo


심각한 ASP 오류 코드는 다음과 같은 리스트입니다.

ASP 0100
 메모리 부족
 필요한 메모리를 할당할 수 없습니다.
 
ASP 0101
 예기치 않은 오류
 함수가 (exception name)을 반환했습니다.
 
ASP 0102
 문자열 입력 필요
 함수에 문자열을 입력해야 합니다.
 
ASP 0103
 정수 입력 필요
 함수에 정수를 입력해야 합니다.
 
ASP 0104
 허용되지 않는 작업
 허용되지 않는 작업
 
ASP 0105
 범위를 벗어난 인덱스
 배열 인덱스가 범위를 벗어났습니다.
 
ASP 0106
 형식 불일치
 처리할 수 없는 데이터 형식이 있습니다.
 
ASP 0107
 스택 오버플로
 처리 중인 데이터가 허용된 한계를 벗어났습니다.
 
ASP 0115
 예기치 않은 오류
 외부 개체에 트랩 가능한 오류 (exception name)이 발생했습니다. 스크립트를 계속 실행할 수 없습니다.
 
ASP 0190
 예기치 않은 오류
 외부 개체를 해제하는 동안 트랩 가능한 오류가 발생했습니다.
 
ASP 0191
 예기치 않은 오류
 외부 개체의 OnStartPage 메서드에 트랩 가능한 오류가 발생했습니다.
 
ASP 0192
 예기치 않은 오류
 외부 개체의 OnEndPage 메서드에 트랩 가능한 오류가 발생했습니다.
 
ASP 0193
 OnStartPage 실패
 외부 개체의 OnStartPage 메서드에 오류가 발생했습니다.
 
ASP 0194
 OnEndPage 실패
 외부 개체의 OnEndPage 메서드에 오류가 발생했습니다.
 
ASP 0240
 스크립트 엔진 예외
 스크립트 엔진에서 (object name)의 (exception name) 예외를 (object name)으로부터 내보냈습니다.
 
ASP 0241
 CreateObject 예외
 (object name)의 CreateObject에서 (exception name) 예외가 발생했습니다.
 
ASP 0242
 OnStartPage 인터페이스 쿼리 예외
 개체의 (object name) OnStartPage 또는 OnEndPage 메서드를 쿼리하는 동안 (exception name) 예외가 발생했습니다.

그러면,. 위 값이 적용되지 않았을 때에는 500 에러는 이벤트로그에 기록되지 않고 IIS 로그에만 기록되었습니다. 두개의 값을 True 했을때 500 내부서버 오류가 나면 어떻게 될까요?



<% response.write "ok %> 인 경우



<% response.write "ok > 인 경우


http://www.microsoft.com/technet/prodtechnol/windowsserver2003/ko/library/iis/
cde669f1-5714-4159-af95-f334251c8cbd.mspx



07-eventlog-2.png
07-eventlog-1.png
07-eventlog-3.png
07-eventlog-4.png
07-Microsoft_TechNet.gif

댓글 없음:

댓글 쓰기

가장 많이 본 글