다음을 통해 공유


추적 로깅 래퍼 매크로

TraceLoggingWriteTraceLoggingWriteActivity 매크로는 매크로 매개 변수에 따라 구성된 TraceLogging 이벤트를 내보냅니다. 이러한 각 매크로는 필수 매개 변수 집합과 최대 99개의 선택적 매개 변수를 허용합니다. 각 선택적 매개 변수는 이벤트를 구성하거나 이벤트에 필드를 추가합니다. 각 선택적 매개 변수는 이 페이지에 설명된 TraceLogging 래퍼 매크로 중 하나여야 합니다.

예:

TraceLoggingWrite(
    g_hProvider,
    "MyEvent1",
    TraceLoggingLevel(WINEVENT_LEVEL_WARNING), // Levels defined in <winmeta.h>
    TraceLoggingKeyword(MyNetworkingKeyword),
    TraceLoggingString(operationName), // Adds an "operationName" field.
    TraceLoggingHResult(hr, "NetStatus")); // Adds a "NetStatus" field.

이 예제 g_hProvider 에서 및 "MyEvent1" 는 필수 매개 변수입니다. 이벤트 및 이벤트 이름에 사용할 공급자를 지정합니다. 나머지 각 매개 변수는 래퍼 매크로입니다. 및 TraceLoggingKeyword 매개 변수는 TraceLoggingLevel 이벤트를 구성합니다. 및 TraceLoggingHResult 매개 변수는 TraceLoggingString 이벤트에 필드를 추가합니다.

이벤트 구성 매크로

다음 매크로는 이벤트를 구성합니다.

TraceLoggingWrite에 특정 구성 매크로가 제공되지 않으면 해당 이벤트에 기본값이 사용됩니다. 예를 들어 이벤트에 TraceLoggingLevel 매개 변수가 사용되지 않는 경우 이벤트는 기본 수준 5(VERBOSE)를 사용합니다.

  • TraceLoggingLevel 은 이벤트의 수준을 설정합니다. 수준은 이벤트 심각도를 나타내는 8비트 값입니다. 1(WINEVENT_LEVEL_CRITICAL)에서 5(WINEVENT_LEVEL_VERBOSE)의 수준은 에 <winmeta.h>정의됩니다. 지정하지 않으면 이벤트가 기본적으로 수준 5(VERBOSE)로 설정됩니다. 수준은 ETW 이벤트 라우팅 및 필터링의 중요한 부분이므로 모든 이벤트에는 의미 있는 0이 아닌 수준이 있어야 합니다.
  • TraceLoggingKeyword는 이벤트의 키워드(keyword) 설정합니다. 키워드(keyword) 각 비트가 이벤트가 속한 범주를 나타내는 64비트 값입니다. 키워드(keyword) 하위 48비트 는 공급자 소유자가 정의하고 상위 16비트 키워드(keyword) Microsoft에서 정의합니다. 예를 들어 이름이 "MyCompany.MyComponent"인 모든 공급자가 키워드(keyword) 0x1 사용하여 "네트워킹"을 의미하도록 결정할 수 있습니다. 지정하지 않으면 이벤트가 기본적으로 키워드(keyword) 0x0(없음)으로 설정됩니다. 키워드는 ETW 이벤트 라우팅 및 필터링의 중요한 부분이므로 모든 이벤트에 의미 있는 0이 아닌 키워드(keyword) 있어야 합니다.
  • TraceLoggingOpcode 는 이벤트의 opcode를 설정합니다. opcode는 이벤트에 대한 특수 의미 체계를 나타내는 8비트 값입니다. 예를 들어 이벤트가 ETW 작업의 시작(WINEVENT_OPCODE_START) 또는 끝(WINEVENT_OPCODE_STOP)을 기록합니다(관련 이벤트 그룹). 지정하지 않으면 이벤트가 기본적으로 opcode 0(WINEVENT_OPCODE_INFO)으로 설정되며 이는 특별한 의미 체계가 필요하지 않음을 나타냅니다.
  • TraceLoggingChannel 은 이벤트의 채널을 설정합니다. 채널은 다양한 용도로 사용되는 8비트 값입니다. 지정하지 않으면 이벤트가 기본적으로 채널 11(WINEVENT_CHANNEL_TRACELOGGING)으로 설정됩니다. 대부분의 이벤트는 이벤트의 채널을 변경할 필요가 없으며 TraceLoggingChannel을 사용하면 안 됩니다.
  • TraceLoggingEventTag 는 이벤트의 태그를 설정합니다. 태그는 공급자 정의 의미 체계가 있는 28비트 값입니다. 예를 들어 공급자는 태그 비트 0x1000000 정의하여 이벤트가 잠재적으로 개인 식별 정보를 포함하고 공급자별 이벤트 처리 도구로부터 특별한 처리를 받아야 함을 나타낼 수 있습니다. 지정하지 않으면 태그의 기본값은 0입니다.
  • TraceLoggingDescription 은 이벤트의 설명을 설정합니다. 설명은 이벤트에 대한 사람이 읽을 수 있는 설명을 포함하는 문자열 리터럴입니다. 이는 이벤트 목적에 대한 주석으로 사용되며, 설명은 구성 요소의 PDB(디버그 기호)에 주석으로도 기록됩니다. 지정하지 않으면 설명의 기본값은 입니다 "".
  • TraceLoggingCustomAttribute 는 구성 요소의 PDB(디버그 기호)에 키-값 주석을 추가합니다.

필드 매크로

TraceLogging은 이벤트에 필드를 추가하기 위해 많은 래퍼 매크로를 지원합니다. 각 필드는 이름-값 쌍입니다. 예를 들어 는 TraceLoggingInt32(argc, "ArgCount")argc이 인 "ArgCount"라는 INT32 필드를 추가합니다.

대부분의 필드 래퍼 매크로는 유사한 매개 변수를 허용합니다.

  • 값: 필드에 포함할 데이터를 결정하기 위해 런타임에 계산되는 식입니다. 대부분의 필드 래퍼 매크로는 단일 매개 변수를 사용하여 값을 지정하지만 일부 매크로에는 필드 값(예: 포인터 및 길이)에 여러 매개 변수가 필요합니다. 값 매개 변수는 항상 필요합니다.
    • 경우에 따라 필드 값은 pszValue로 지정되며, 이 경우 필드에 포함할 0으로 끝나는 문자 문자열에 대한 포인터입니다. pszValue 는 NULL일 수 있으며, 이 경우 필드 값은 빈 문자열 ""입니다.
    • 경우에 따라 필드 값은 pchValue로 지정되며, 이 경우 필드에 포함할 cchValue 문자 문자열에 대한 포인터입니다. pchValuecchValue 가 0인 경우에만 NULL일 수 있습니다.
    • 경우에 따라 필드 값은 자동으로 결정된 크기( cbValue 매개 변수 없음)를 사용하여 pValue 로 지정됩니다. 이 경우 필드에 포함할 값에 대한 포인터입니다. pValue 는 NULL이 아닐 수 있습니다.
    • 경우에 따라 필드 값은 cbValue 매개 변수를 사용하여 pValue로 지정되어 필드에 포함할 데이터의 크기(바이트)를 지정합니다. pValuecbValue 가 0인 경우에만 NULL일 수 있습니다.
  • 이름: 필드에 사용할 이름을 가진 문자열 리터럴(컴파일 시간 상수)입니다. 대부분의 필드 래퍼 매크로에는 이름 매개 변수가 필요하지 않습니다. name 매개 변수를 생략하면 매크로 , pszValue, pchValue 또는 pValue 매개 변수의 전처리기 텍스트에 따라 필드 이름이 결정됩니다. 예를 들어 TraceLoggingInt32(x[4] + y)TraceLoggingInt32(x[4] + y, "x[4] + y")와 같습니다. 둘 다 식을 x[4] + y계산하여 결정된 값을 사용하여 라는 "x[4] + y" 필드를 이벤트에 추가합니다.
  • 설명: 필드에 사용할 설명이 있는 문자열 리터럴(컴파일 시간 상수)입니다. 주로 필드에 대한 주석을 배치하는 편리한 위치로 사용되지만 설명은 구성 요소의 PDB(디버그 기호)에 주석으로도 기록됩니다. 설명은 선택 사항입니다. description 매개 변수를 생략하면 필드의 설명이 기본적으로 로 설정 ""됩니다.
  • 태그: 공급자 정의 의미 체계가 있는 28비트 정수(컴파일 시간 상수)입니다. 예를 들어 공급자는 태그 0x2 정의하여 필드에 전화 번호가 포함되어 있으며 공급자별 이벤트 처리 도구로부터 특별한 처리를 받아야 함을 나타낼 수 있습니다. 태그 매개 변수를 생략하면 필드의 태그는 기본적으로 0으로 설정됩니다.

예를 들어 다음 래퍼 매크로 호출은 모두 동일한 효과를 갖습니다.

  • TraceLoggingInt32(argc)
  • TraceLoggingInt32(argc, "argc")
  • TraceLoggingInt32(argc, "argc", "")
  • TraceLoggingInt32(argc, "argc", "", 0)

스칼라

  • TraceLoggingValue(value, [name, ...]):

    값 매개 변수의 형식에서 자동으로 추론되는 형식의 필드를 추가합니다. (C++에만 해당)

  • TraceLoggingInt8(value, [name, ...]):

    INT8 값이 있는 필드를 추가합니다.

  • TraceLoggingUInt8(value, [name, ...]):

    UINT8 값이 있는 필드를 추가합니다.

  • TraceLoggingInt16(value, [name, ...]):

    INT16 값이 있는 필드를 추가합니다.

  • TraceLoggingUInt16(value, [name, ...]):

    UINT16 값이 있는 필드를 추가합니다.

  • TraceLoggingInt32(value, [name, ...]):

    INT32 값이 있는 필드를 추가합니다.

  • TraceLoggingUInt32(value, [name, ...]):

    UINT32 값이 있는 필드를 추가합니다.

  • TraceLoggingInt64(value, [name, ...]):

    INT64 값이 있는 필드를 추가합니다.

  • TraceLoggingUInt64(value, [name, ...]):

    UINT64 값이 있는 필드를 추가합니다.

  • TraceLoggingIntPtr(value, [name, ...]):

    INT_PTR 값(포인터와 크기가 같은 부호 있는 정수)이 있는 필드를 추가합니다.

  • TraceLoggingUIntPtr(value, [name, ...]):

    UINT_PTR 값이 있는 필드를 추가합니다(포인터와 크기가 같은 부호 없는 정수).

  • TraceLoggingLong(value, [name, ...]):

    LONG 값이 있는 필드를 추가합니다(Windows 플랫폼에서는 long int, 32비트 부호 있음).

  • TraceLoggingULong(value, [name, ...]):

    ULONG 값이 있는 필드를 추가합니다(Windows 플랫폼에서는 부호 없는 long int, 32비트).

  • TraceLoggingHexInt8(value, [name, ...]):

    16진수 서식 힌트가 있는 INT8 값이 있는 필드를 추가합니다.

  • TraceLoggingHexUInt8(value, [name, ...]):

    16진수 서식 힌트가 있는 UINT8 값이 있는 필드를 추가합니다.

  • TraceLoggingHexInt16(value, [name, ...]):

    16진수 서식 힌트가 있는 INT16 값이 있는 필드를 추가합니다.

  • TraceLoggingHexUInt16(value, [name, ...]):

    16진수 서식 힌트가 있는 UINT16 값이 있는 필드를 추가합니다.

  • TraceLoggingHexInt32(value, [name, ...]):

    16진수 서식 힌트가 있는 INT32 값이 있는 필드를 추가합니다.

  • TraceLoggingHexUInt32(value, [name, ...]):

    16진수 서식 힌트가 있는 UINT32 값이 있는 필드를 추가합니다.

  • TraceLoggingHexInt64(value, [name, ...]):

    16진수 서식 힌트가 있는 INT64 값이 있는 필드를 추가합니다.

  • TraceLoggingHexUInt64(value, [name, ...]):

    16진수 서식 힌트가 있는 UINT64 값이 있는 필드를 추가합니다.

  • TraceLoggingHexIntPtr(value, [name, ...]):

    16진수 서식 힌트가 있는 INT_PTR 값이 있는 필드를 추가합니다.

  • TraceLoggingHexUIntPtr(value, [name, ...]):

    16진수 서식 힌트가 있는 UINT_PTR 값이 있는 필드를 추가합니다.

  • TraceLoggingHexLong(value, [name, ...]):

    16진수 서식 힌트가 있는 LONG 값이 있는 필드를 추가합니다.

  • TraceLoggingHexULong(value, [name, ...]):

    16진수 서식 힌트가 있는 ULONG 값이 있는 필드를 추가합니다.

  • TraceLoggingFloat32(value, [name, ...]):

    FLOAT(32비트 부동 소수점) 값이 있는 필드를 추가합니다.

  • TraceLoggingFloat64(value, [name, ...]):

    DOUBLE(64비트 부동 소수점) 값이 있는 필드를 추가합니다.

  • TraceLoggingBoolean(value, [name, ...]):

    8비트 부울 값(Win32 BOOLEAN 또는 C++ bool)이 있는 필드를 추가합니다.

  • TraceLoggingBool(value, [name, ...]):

    32비트 부울 값(Win32 BOOL)이 있는 필드를 추가합니다.

  • TraceLoggingChar(value, [name, ...]):

    값이 있는 char 필드를 추가합니다(문자열 서식 힌트가 있는 8비트 정수이며 일반적으로 코드 페이지 1252로 처리됨).

  • TraceLoggingChar16(value, [name, ...]):

    값이 있는 char16_t 필드를 추가합니다(일반적으로 UCS-2로 처리되는 문자열 서식 힌트가 있는 16비트 정수).

  • TraceLoggingWChar(value, [name, ...]):

    값이 있는 wchar_t 필드를 추가합니다(Windows 플랫폼과 동일 char16_t ).

  • TraceLoggingPointer(value, [name, ...]):

    값이 있는 void* 필드를 추가합니다(16진수 서식 힌트가 있는 포인터 크기 값).

  • TraceLoggingCodePointer(value, [name, ...]):

    값이 있는 void* 필드를 추가합니다(코드 포인터 서식 힌트가 있는 포인터 크기 값).

  • TraceLoggingPid(value, [name, ...]):

    프로세스 ID 서식 힌트가 있는 INT32 값이 있는 필드를 추가합니다.

  • TraceLoggingTid(value, [name, ...]):

    스레드 ID 서식 힌트가 있는 INT32 값이 있는 필드를 추가합니다.

  • TraceLoggingIPv4Address(value, [name, ...]):

    IPv4 서식 힌트(네트워크 바이트 순서)가 있는 UINT32 값이 있는 필드를 추가합니다.

  • TraceLoggingIPv6Address(pValue, [name, ...]):

    IPv6 서식 힌트가 있는 16바이트 이진 값이 있는 필드를 추가합니다.

  • TraceLoggingPort(value, [name, ...]):

    IP 포트 서식 힌트(네트워크 바이트 순서)가 있는 UINT16 값이 있는 필드를 추가합니다.

  • TraceLoggingSocketAddress(pValue, cbValue, [name, ...]):

    SOCKADDR 값이 있는 필드를 추가합니다.

  • TraceLoggingWinError(value, [name, ...]):

    Win32 오류 코드 서식 힌트가 있는 UINT32 값이 있는 필드를 추가합니다.

  • TraceLoggingNTStatus(value, [name, ...]):

    WinNT 오류 코드 서식 힌트가 있는 NTSTATUS(LONG) 값이 있는 필드를 추가합니다.

  • TraceLoggingHResult(value, [name, ...]):

    WINDOWS HRESULT 서식 힌트가 있는 HRESULT(LONG) 값이 있는 필드를 추가합니다.

  • TraceLoggingFileTime(value, [name, ...]):

    FILETIME 값이 있는 필드를 추가합니다. C 코드에서 사용되는 경우 매개 변수는 value lvalue 식이어야 합니다.

  • TraceLoggingFileTimeUtc(value, [name, ...]):

    UTC 표준 시간대 서식 힌트가 있는 FILETIME 값이 있는 필드를 추가합니다. C 코드에서 사용되는 경우 매개 변수는 value lvalue 식이어야 합니다.

  • TraceLoggingSystemTime(value, [name, ...]):

    SYSTEMTIME 값이 있는 필드를 추가합니다. C 코드에서 사용되는 경우 매개 변수는 value lvalue 식이어야 합니다.

  • TraceLoggingSystemTimeUtc(value, [name, ...]):

    UTC 표준 시간대 서식 힌트가 있는 SYSTEMTIME 값이 있는 필드를 추가합니다. C 코드에서 사용되는 경우 매개 변수는 value lvalue 식이어야 합니다.

  • TraceLoggingGuid(value, [name, ...]):

    GUID 값이 있는 필드를 추가합니다. C 코드에서 사용되는 경우 매개 변수는 value lvalue 식이어야 합니다.

  • TraceLoggingString(pszValue, [name, ...]):

    0으로 끝나는 char 문자열이 있는 필드를 추가합니다(일반적으로 코드 페이지 1252로 처리됨). pszValue가 NULL이면 빈 문자열 "" 이 필드 값으로 사용됩니다.

  • TraceLoggingUtf8String(pszValue, [name, ...]):

    UTF-8 서식 힌트가 있는 0으로 끝나는 char 문자열이 있는 필드를 추가합니다. pszValue가 NULL이면 빈 문자열 "" 이 필드 값으로 사용됩니다.

  • TraceLoggingString16(pszValue, [name, ...]):

    0으로 끝나는 char16_t 문자열(UTF-16)이 있는 필드를 추가합니다. pszValue가 NULL이면 빈 문자열 u"" 이 필드 값으로 사용됩니다.

  • TraceLoggingWideString(pszValue, [name, ...]):

    0으로 끝나는 wchar_t 문자열이 있는 필드를 추가합니다(Windows의 경우 UTF-16). pszValue가 NULL이면 빈 문자열 L"" 이 필드 값으로 사용됩니다.

  • TraceLoggingCountedString(pchValue, cchValue, [name, ...]):

    계산된 char 문자열이 있는 필드를 추가합니다(일반적으로 코드 페이지 1252로 처리됨). pchValue는 cchValue가 0인 경우에만 NULL일 수 있습니다.

  • TraceLoggingCountedUtf8String(pchValue, cchValue, [name, description, tag]):

    UTF-8 서식 힌트가 있는 계산된 char 문자열이 있는 필드를 추가합니다. pchValue는 cchValue가 0인 경우에만 NULL일 수 있습니다.

  • TraceLoggingCountedString16(pchValue, cchValue, [name, ...]):

    계산된 char16_t 문자열이 있는 필드를 추가합니다(UTF-16). pchValue는 cchValue가 0인 경우에만 NULL일 수 있습니다.

  • TraceLoggingCountedWideString(pchValue, cchValue, [name, description, tag]):

    계산된 wchar_t 문자열이 있는 필드를 추가합니다(Windows의 경우 UTF-16). pchValue는 cchValue가 0인 경우에만 NULL일 수 있습니다.

  • TraceLoggingAnsiString(pValue, [name, ...]):

    ANSI_STRING 값이 있는 필드를 추가합니다. pValue 포인터는 NULL이 아니어야 합니다.

  • TraceLoggingUnicodeString(pValue, [name, ...]):

    UNICODE_STRING 값이 있는 필드를 추가합니다. pValue 포인터는 NULL이 아니어야 합니다.

  • TraceLoggingSid(pValue, [name, ...]):

    SID 값이 있는 필드를 추가합니다. pValue 포인터는 NULL이 아니어야 하며 올바르게 초기화된 SID를 가리킵니다(Revision 및 SubAuthorityCount는 유효해야 합니다).

  • TraceLoggingBinary(pValue, cbValue, [name, ...]):

    이진 데이터가 있는 필드를 추가합니다.

  • TraceLoggingBinaryEx(pValue, cbValue, outType, [name, ...]):

    로 지정된 서식 힌트가 있는 이진 데이터가 있는 필드를 추가합니다 outType.

  • TraceLoggingBinaryBuffer(pValue, StructType, [name, ...]):

    이진 데이터가 있는 필드를 추가합니다. pValue 는 구조체에 대한 NULL이 아닌 포인터여야 StructType 합니다. pValue->Buffer 는 데이터의 시작을 가리키고 pValue->Length 필드에 포함할 데이터의 바이트 수여야 합니다.

  • TraceLoggingBinaryBufferEx(pValue, StructType, outType, name, description, tag):

    로 지정된 서식 힌트가 있는 이진 데이터가 있는 필드를 추가합니다 outType. pValue 는 구조체에 대한 NULL이 아닌 포인터여야 StructType 합니다. pValue->Buffer 는 데이터의 시작을 가리키고 pValue->Length 필드에 포함할 데이터의 바이트 수여야 합니다.

  • TraceLoggingCustom(pValue, cbValue, protocol, bSchema, cbSchema, [name, ...]):

    serialization 프로토콜에 따라 serialize된 이진 데이터가 있는 필드를 추가합니다. 컴파일 시간 상수 디코딩 정보는 이벤트 디코더에 의한 역직렬화를 허용하기 위해 이벤트와 함께 포함됩니다.

구조체

TraceLoggingStruct(fieldCount, name, [...]) 매크로를 사용하여 명명된 구조체(필드 그룹)를 만들 수 있습니다. fieldCount 매개 변수는 구조체의 일부로 계산해야 하는 후속 필드 수를 나타냅니다. 구조체를 중첩할 수 있습니다. 이 경우 각 중첩된 구조체와 포함된 필드는 부모 구조체를 정의하기 위해 단일 필드로 계산됩니다.

배열

스칼라(단일) 값 배열이 포함된 필드를 만들 수 있습니다. 예를 들어 이벤트에 GUID 배열을 단일 필드로 추가합니다.

참고

TraceLogging 프로토콜은 모든 형식의 배열을 지원하지만 TraceLoggingProvider.h는 간단한 값 배열에 대한 래퍼 매크로만 제공합니다. 예를 들어 INT32 및 GUID 배열에 대한 매크로를 제공하지만 String 배열이나 구조체 배열에 대한 매크로는 제공하지 않습니다. 데이터를 버퍼로 마샬링한 다음 아래에 설명된 매크로를 사용하여 복잡한 값 배열로 TraceLoggingPacked 이벤트를 만들 수 있습니다.

TraceLogging은 고정 길이 및 가변 길이 배열을 지원합니다.

  • Array 컴파일 시간에 배열 길이를 알 수 없으며 이벤트가 생성될 때마다 다를 수 있는 경우 매크로를 사용합니다.
  • 배열 길이가 FixedArray 컴파일 시간에 알려진 경우(즉, 배열 길이가 상수인 경우) 매크로를 사용합니다. 이렇게 하면 이벤트 소비자에게 특정 이벤트 이름을 가진 모든 이벤트가 배열 필드에 동일한 수의 항목을 갖게 된다는 것을 알 수 있습니다.

모든 배열 매크로는 pValuescValues 매개 변수를 지정해야 하며 , pValues 는 배열 콘텐츠의 시작을 가리키고 cValues 는 배열의 항목 수로 설정됩니다. pValues는 cValues가 0 인 경우에만 NULL일 수 있습니다.

모든 배열 매크로는 필요에 따라 스칼라 매크로에 설명된 대로 이름, 설명태그 매개 변수를 허용합니다. 이름을 지정하지 않으면 필드 이름은 pValues의 전처리기 텍스트에서 결정됩니다. 설명을 지정하지 않으면 필드 설명은 가 됩니다"". 태그를 지정하지 않으면 필드 태그는 가 됩니다0.

참고

ETW가 이벤트를 삭제하지 않도록 하려면 큰 배열을 사용하여 이벤트를 만들지 않습니다. ETW는 64KB보다 큰 이벤트를 지원하지 않습니다. 이러한 이벤트는 ETW에 의해 자동으로 삭제됩니다. 또한 소비자 세션의 BufferSize 보다 큰 이벤트도 ETW에서 삭제됩니다. 이벤트 크기는 이벤트의 헤더, 메타데이터(공급자, 이벤트 및 필드 이름) 및 데이터(필드 값)의 합계를 기반으로 합니다.

  • TraceLoggingInt8Array(pValues, cValues, [name, ...])
  • TraceLoggingInt8FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingUInt8Array(pValues, cValues, [name, ...])
  • TraceLoggingUInt8FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingInt16Array(pValues, cValues, [name, ...])
  • TraceLoggingInt16FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingUInt16Array(pValues, cValues, [name, ...])
  • TraceLoggingUInt16FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingInt32Array(pValues, cValues, [name, ...])
  • TraceLoggingInt32FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingUInt32Array(pValues, cValues, [name, ...])
  • TraceLoggingUInt32FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingInt64Array(pValues, cValues, [name, ...])
  • TraceLoggingInt64FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingUInt64Array(pValues, cValues, [name, ...])
  • TraceLoggingUInt64FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingIntPtrArray(pValues, cValues, [name, ...])
  • TraceLoggingIntPtrFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingUIntPtrArray(pValues, cValues, [name, ...])
  • TraceLoggingUIntPtrFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingLongArray(pValues, cValues, [name, ...])
  • TraceLoggingLongFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingULongArray(pValues, cValues, [name, ...])
  • TraceLoggingULongFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingHexInt8Array(pValues, cValues, [name, ...])
  • TraceLoggingHexInt8FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingHexUInt8Array(pValues, cValues, [name, ...])
  • TraceLoggingHexUInt8FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingHexInt16Array(pValues, cValues, [name, ...])
  • TraceLoggingHexInt16FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingHexUInt16Array(pValues, cValues, [name, ...])
  • TraceLoggingHexUInt16FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingHexInt32Array(pValues, cValues, [name, ...])
  • TraceLoggingHexInt32FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingHexUInt32Array(pValues, cValues, [name, ...])
  • TraceLoggingHexUInt32FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingHexInt64Array(pValues, cValues, [name, ...])
  • TraceLoggingHexInt64FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingHexUInt64Array(pValues, cValues, [name, ...])
  • TraceLoggingHexUInt64FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingHexIntPtrArray(pValues, cValues, [name, ...])
  • TraceLoggingHexIntPtrFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingHexUIntPtrArray(pValues, cValues, [name, ...])
  • TraceLoggingHexUIntPtrFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingHexLongArray(pValues, cValues, [name, ...])
  • TraceLoggingHexLongFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingHexULongArray(pValues, cValues, [name, ...])
  • TraceLoggingHexULongFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingFloat32Array(pValues, cValues, [name, ...])
  • TraceLoggingFloat32FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingFloat64Array(pValues, cValues, [name, ...])
  • TraceLoggingFloat64FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingBooleanArray(pValues, cValues, [name, ...])
  • TraceLoggingBooleanFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingBoolArray(pValues, cValues, [name, ...])
  • TraceLoggingBoolFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingCharArray(pValues, cValues, [name, ...])
  • TraceLoggingCharFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingChar16Array(pValues, cValues, [name, ...])
  • TraceLoggingChar16FixedArray(pValues, cValues, [name, ...])
  • TraceLoggingWCharArray(pValues, cValues, [name, ...])
  • TraceLoggingWCharFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingPointerArray(pValues, cValues, [name, ...])
  • TraceLoggingPointerFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingCodePointerArray(pValues, cValues, [name, ...])
  • TraceLoggingCodePointerFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingFileTimeArray(pValues, cValues, [name, ...])
  • TraceLoggingFileTimeFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingFileTimeUtcArray(pValues, cValues, [name, ...])
  • TraceLoggingFileTimeUtcFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingSystemTimeArray(pValues, cValues, [name, ...])
  • TraceLoggingSystemTimeFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingSystemTimeUtcArray(pValues, cValues, [name, ...])
  • TraceLoggingSystemTimeUtcFixedArray(pValues, cValues, [name, ...])
  • TraceLoggingGuidArray(pValues, cValues, [name, ...])
  • TraceLoggingGuidFixedArray(pValues, cValues, [name, ...])

압축된 매크로

TraceLoggingProvider.h는 Blittable 필드 형식에 대한 필드 매크로만 제공합니다. 즉, 각 필드 매크로가 필드 값이 있는 단일 필드 및 단일 연속 메모리 영역에 해당하는 필드입니다.

TraceLoggingProvider.h는 다음과 같은 더 복잡한 사례에 대한 직접적인 지원을 제공하지 않습니다.

  • 문자열 배열과 같은 가변 길이 형식의 배열 로깅
  • 구조체 배열 로깅
  • 이벤트 로깅 오버헤드를 줄이기 위해 단일 버퍼를 통해 여러 필드를 ETW에 전달합니다.

이러한 시나리오를 지원하기 위해 TraceLoggingProvider.h는 이벤트의 이벤트 정의(메타데이터) 및 필드 값(데이터)을 직접 조작할 수 있는 여러 TraceLoggingPacked 매크로를 정의합니다.

경고

매크로는 TraceLoggingPacked 올바르게 사용하기가 까다롭고 TraceLogging 이벤트가 생성되는 방법을 잘 이해해야 합니다. 잘못 사용하면 올바르게 디코딩되지 않는 손상된 이벤트가 발생합니다.

이러한 매크로 사용에 대한 자세한 내용은 TraceLoggingProvider.h 헤더의 주석을 참조하세요.

  • TraceLoggingPackedField(pValue, cbValue, inType, [name, description, tags]):

    필드 데이터(pValue, cbValue) 및 필드 메타데이터(이름, inType)를 추가합니다.

  • TraceLoggingPackedFieldEx(pValue, cbValue, inType, outType, [name, ...]):

    필드 데이터(pValue, cbValue) 및 필드 메타데이터(이름, inType)를 서식 힌트(outType)와 함께 추가합니다.

  • TraceLoggingPackedMetadata(inType, [name, ...]):

    필드 데이터를 추가하지 않고 필드 메타데이터(이름, inType)를 추가합니다. TraceLoggingPackedData를 통해 해당 필드 데이터를 추가해야 합니다.

  • TraceLoggingPackedMetadataEx(inType, outType, [name, ...]):

    필드 데이터를 추가하지 않고 필드 메타데이터(이름, inType) 및 서식 힌트(outType)를 추가합니다. TraceLoggingPackedData를 통해 해당 필드 데이터를 추가해야 합니다.

  • TraceLoggingPackedStruct(fieldCount, name, [...]):

    구조체에 대한 필드 메타데이터(이름, fieldCount)를 추가합니다.

  • TraceLoggingPackedStructArray(fieldCount, [name, ...]):

    구조체의 가변 길이 배열에 대한 필드 메타데이터(이름, fieldCount)를 추가합니다. 배열 길이는 TraceLoggingPackedData를 통해 지정해야 합니다.

  • TraceLoggingPackedData(pValue, cbValue):

    필드 메타데이터를 추가하지 않고 이벤트에 필드 데이터를 추가합니다. 메타데이터 매크로를 통해 해당 메타데이터를 추가해야 합니다.

  • TraceLoggingPackedDataEx(pValue, cbValue, dataDescType):

    데이터에 대한 EVENT_DATA_DESCRIPTOR 특정 Type 을 사용하여 필드 메타데이터를 추가하지 않고 이벤트에 필드 데이터를 추가합니다. 메타데이터 매크로를 통해 해당 메타데이터를 추가해야 합니다.