다음을 통해 공유


이벤트 식별자(이벤트 로깅)

이벤트 식별자는 특정 이벤트를 고유하게 식별합니다. 각 이벤트 원본 은 자체 번호가 매겨진 이벤트와 메시지 파일에 매핑되는 설명 문자열을 정의할 수 있습니다. 이벤트 뷰어는 이러한 문자열을 사용자에게 표시할 수 있습니다. 사용자가 무엇이 잘못되었는지 이해하고 수행할 작업을 제안하는 데 도움이 됩니다. 관리자 또는 지원 기술자가 아닌 자신의 문제를 해결하는 사용자에게 설명을 지시합니다. 자세한 내용은 오류 메시지 지침을 참조하세요.

서식

다음 다이어그램에서는 이벤트 식별자의 형식을 보여 줍니다.

  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 +---+-+-+-----------------------+-------------------------------+
 |Sev|C|R|     Facility          |               Code            |
 +---+-+-+-----------------------+-------------------------------+

Sev

심각도입니다. 심각도는 다음과 같이 정의됩니다.

00 - 성공
01 - 정보
10 - 경고
11 - 오류

C

고객 비트. 이 비트는 다음과 같이 정의됩니다.

0 - 시스템 코드
1 - 고객 코드

R

예약된 비트.

시설

시설 코드. 이 값은 FACILITY_NULL 수 있습니다.

코드

시설의 상태 코드입니다.

메시지 정의

메시지는 이벤트 메시지 파일에 정의됩니다. 이벤트 메시지 파일의 설명 문자열은 이벤트 식별자에 의해 인덱싱되어 이벤트 뷰어 이벤트 식별자를 기반으로 이벤트에 대한 이벤트별 텍스트를 표시할 수 있습니다. 모든 설명은 지역화되고 언어에 따라 달라집니다. 메시지 파일을 빌드하는 방법에 대한 자세한 내용은 메시지 텍스트 파일을 참조하세요.

설명 문자열에는 %n 형식의 삽입 문자열 자리 표시자가 포함될 수 있습니다. 여기서 %1은 첫 번째 삽입 문자열 등을 나타냅니다. 예를 들어 .mc 파일의 샘플 항목은 다음과 같습니다.

MessageId=0x4
Severity=Error
Facility=System
SymbolicName=MSG_CMD_DELETE
Language=English
File %1 contains %2, which is in error.
.

이 경우 ReadEventLog 에서 반환되는 버퍼에는 삽입 문자열이 포함됩니다. EVENTLOGRECORD 구조체의 NumStrings 멤버는 삽입 문자열 수를 나타냅니다. EVENTLOGRECORD 구조체의 StringOffset 멤버는 버퍼에서 첫 번째 삽입 문자열의 위치를 나타냅니다. FormatMessage 함수를 호출할 때 버퍼의 각 문자열 주소를 가리키는 DWORD_PTRs 배열을 전달할 수 있으며 메시지에 문자열을 삽입합니다.

설명 문자열에는 매개 변수 메시지 파일의 매개 변수 문자열에 대한 자리 표시자가 포함될 수도 있습니다. 자리 표시자는 %%n 형식입니다. 여기서 %%1은 1의 식별자를 가진 매개 변수 문자열로 대체됩니다. 그러나 FormatMessage 가 반환하는 메시지 문자열에 매개 변수 문자열을 삽입하는 것은 사용자에게 달려 있습니다. 일반적으로 FormatMessage를 호출하여 이벤트에 대한 메시지 문자열을 가져옵니다. 그런 다음%%n 매개 변수에 대한 메시지 문자열을 구문 분석합니다. 메시지에 하나 이상의 매개 변수가 포함된 경우 원본에 대한 ParameterMessageFile 레지스트리 값을 로드합니다. 메시지 문자열의 각 매개 변수에 대해 식별자를 가져와 FormatMessage 에 전달하여 매개 변수 문자열을 가져옵니다. 메시지 문자열의 매개 변수를 FormatMessage 가 반환한 매개 변수 문자열로 바꿉니다.

삽입 문자열

삽입 문자열은 설명 문자열의 자리 표시자에 대한 값을 채우는 데 사용되는 선택적 언어 독립적 문자열입니다. 문자열은 지역화되지 않으므로 이러한 자리 표시자는 숫자 값, 파일 이름, 사용자 이름 등과 같은 언어 독립적 문자열을 나타내는 데만 사용해야 합니다. 문자열 길이는 32K바이트(1자)를 초과하면 안됩니다.

여러 문자열을 사용하여 더 큰 설명을 만들지 마세요. 삽입 문자열은 텍스트가 아닌 데이터로 처리해야 합니다. 예를 들어 다음 예제에서는 pszString1 및 pszString2를 pszDescription의 삽입 문자열로 사용하면 안 됩니다.

LPSTR pszString1 = "successfully"; 
LPSTR pszString2 = "not"; 
LPSTR pszDescription = "The user was %1 added to the database.";

다음 예제에서는 pszDescription의 삽입 문자열에 pszString1 또는 pszString2를 사용하는 것이 좋습니다.

LPSTR pszString1 = "c:\\testapp1.c"; 
LPSTR pszString2 = "c:\\testapp2.c"; 
LPSTR pszDescription = "Access denied. Attempted to open the file %1."