로깅 지침
이벤트 로그는 시스템에서 실행되는 시스템 및 애플리케이션을 대신하여 중요한 이벤트의 레코드를 저장합니다. 로깅 함수는 범용이므로 로그에 적합한 정보를 결정해야 합니다. 일반적으로 하드웨어 또는 소프트웨어 문제를 진단하는 데 유용할 수 있는 정보만 기록해야 합니다. 이벤트 로깅은 추적 도구로 사용할 수 없습니다.
기록할 이벤트 선택
다음은 이벤트 로깅이 유용할 수 있는 사례의 예입니다.
- 리소스 문제. 메모리 할당이 실패할 때 경고 이벤트를 로깅하면 메모리 부족 상황의 원인을 나타내는 데 도움이 될 수 있습니다.
- 하드웨어 문제. 디바이스 드라이버가 디스크 컨트롤러 시간 제한, 병렬 포트의 전원 오류 또는 네트워크 또는 직렬 카드의 데이터 오류가 발생하는 경우 디바이스 드라이버는 이러한 이벤트에 대한 정보를 기록하여 시스템 관리자가 하드웨어 문제를 진단하는 데 도움이 될 수 있습니다.
- 나쁜 섹터. 디스크 드라이버가 잘못된 섹터를 발견하면 작업을 다시 시도 한 후 섹터에서 읽거나 쓸 수 있지만 결국 섹터가 나빠질 수 있습니다. 디스크 드라이버가 계속 진행할 수 있는 경우 경고 이벤트를 기록해야 합니다. 그렇지 않으면 오류 이벤트를 기록해야 합니다. 파일 시스템 드라이버가 많은 수의 잘못된 섹터를 찾아 수정하는 경우 경고 이벤트를 기록하면 관리자가 디스크가 실패할 수 있음을 확인하는 데 도움이 될 수 있습니다.
- 정보 이벤트입니다. 서버 애플리케이션(예: 데이터베이스 서버)은 사용자가 로그온하거나, 데이터베이스를 열거나, 파일 전송을 시작하는 것을 기록합니다. 서버는 오류(파일에 액세스할 수 없음, 호스트 프로세스 연결 끊김 등), 데이터베이스 손상 또는 파일 전송 성공 여부와 같은 다른 이벤트를 기록할 수도 있습니다.
메시지 쓰기
메시지는 문제를 해결하려는 관리자 및 사용자에게 의미가 있어야 합니다. 메시지에는 문제의 원인과 해결 방법을 이해하는 데 필요한 모든 정보가 포함되어야 합니다.
"I/O 하위 시스템으로부터 받은 드라이버 패킷이 잘못되었습니다. 데이터가 패킷입니다." 더 나은 메시지는 문제의 드라이버가 제대로 작동하지만 형식이 잘못된 패킷을 로깅하고 있음을 나타냅니다. 문제를 해결하기 위해 드라이버의 유니코드 버전이 필요하다고 말할 수 있습니다. 좋은 오류 메시지를 작성하는 방법에 대한 자세한 내용은 오류 메시지 지침을 참조 하세요.
이벤트 로그를 쉼표 또는 탭으로 구분된 텍스트 파일로 저장할 수 있으므로 메시지 텍스트에 탭이나 쉼표는 사용하지 마세요. 많은 조직에서 이러한 파일을 데이터베이스로 가져오며, 추가 서식 지정 문자를 사용하려면 수동 조작이 필요합니다.
UNC 이름 또는 공백이 포함된 다른 링크를 사용하는 경우 이름을 꺾쇠 괄호로 묶습니다. 예를 들어 <\\sharename\서버 이름입니다>. 관련 도움말 자료를 사용자를 가리키는 메시지 끝에 URL을 작성할 수 있습니다. URL은 정규화된 DNS 호스트 이름이어야 합니다. 예를 들어 메시지에 다음 텍스트를 추가할 수 있습니다. "이 메시지에 대한 추가 정보는 지원 사이트를 https://www.microsoft.com/Support/ProdRedirect/ContentSearch.asp
방문하세요." 이 링크는 사용자를 오류 메시지와 관련된 콘텐츠로 리디렉션하는 ASP 페이지로 연결됩니다. URL을 클릭할 때 전달되는 추가 매개 변수를 구문 분석하여 사용자를 리디렉션할 위치를 결정합니다.
ReportEvent 함수에 전달된 인수는 다음과 같이 URL에 추가됩니다.
strHTTPQuery += L"?EvtSrc=" + _strEscapedSource;
strHTTPQuery += L"&EvtCat=" + _strEscapedCategory;
strHTTPQuery += L"&EvtID=" + _strEscapedEventID;
strHTTPQuery += L"&EvtCatID=" + _strEscapedCategoryID;
strHTTPQuery += L"&EvtType=" + _strEscapedType;
strHTTPQuery += L"&EvtTypeID=" + _strEscapedTypeID;
strHTTPQuery += L"&EvtRptTime=" + _strEscapedDateAndTime;
strHTTPQuery += L"&EvtTZBias=" + _strEscapedTimeZoneBias;
이벤트 원본에 대한 메시지 DLL 헤더의 회사 이름, 제품 이름, 제품 버전, 파일 이름 및 파일 버전이 유효한 경우 URL에도 추가됩니다.
ADD_VER_STR(L"CoName", _strEscapedCompanyName);
ADD_VER_STR(L"ProdName", _strEscapedProductName);
ADD_VER_STR(L"ProdVer", _strEscapedProductVersion);
ADD_VER_STR(L"FileName", _strEscapedFileName);
ADD_VER_STR(L"FileVer", _strEscapedFileVersion);
오버헤드 감소
이벤트 로깅은 디스크 공간 및 프로세서 시간과 같은 리소스를 사용합니다. 이벤트 로그에 필요한 디스크 공간의 양과 이벤트를 기록하는 애플리케이션의 오버헤드는 로그하도록 선택한 정보의 양에 따라 달라집니다. 따라서 필수 정보만 기록하는 것이 중요합니다. 또한 주 코드 경로가 아닌 코드의 오류 경로에 이벤트 로깅 호출을 배치하면 성능이 저하됩니다.
각 이벤트 로그 레코드에 필요한 디스크 공간의 양에는 EVENTLOGRECORD 구조체의 멤버가 포함됩니다. 가변 길이 구조입니다. 문자열 및 이진 데이터는 구조 다음에 저장됩니다.