Поделиться через


Определение каналов

События могут быть записаны в каналы журнала событий, файлы журналов трассировки событий или и то, и другое. Канал — это, по сути, приемник, который собирает события. Если целевая аудитория событий использует потребителей событий, таких как windows Просмотр событий, необходимо определить новые каналы для сбора событий или импортировать существующий канал, определенный другим поставщиком.

Чтобы определить собственные каналы, используйте элемент channel . Чтобы определить импортированный канал, используйте элемент importChannel . Вы можете указать до восьми каналов в любом сочетании импортированных или определяемых каналов.

Канал должен быть одного из четырех типов: Администратор, операционный, аналитический и отладочный. Каждый тип канала имеет целевую аудиторию, которая определяет тип событий, записываемых в канал. Описание каждого типа см. в разделе Сложный тип ChannelType .

Чтобы указать канал, в который записывается событие, задайте для атрибута канала определения события то же значение, что и атрибут chid определения канала. События могут быть записаны только в один канал одновременно, но также могут собираться до 7 других сеансов трассировки событий Windows одновременно.

В следующем примере показано, как импортировать канал. Необходимо задать атрибуты chid и name . Атрибут chid однозначно идентифицирует канал. Каждый идентификатор канала в списке каналов должен быть уникальным. Задайте атрибуту name то же имя, которое использовал поставщик при определении канала.

<instrumentationManifest
    xmlns="http://schemas.microsoft.com/win/2004/08/events" 
    xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    >

    <instrumentation>
        <events>
            <provider name="Microsoft-Windows-SampleProvider" 
                guid="{1db28f2e-8f80-4027-8c5a-a11f7f10f62d}" 
                symbol="PROVIDER_GUID" 
                resourceFileName="<path to the exe or dll that contains the metadata resources>" 
                messageFileName="<path to the exe or dll that contains the string resources>"
                message="$(string.Provider.Name)">

                <channels>
                    <channel chid="c1"
                             name="Microsoft-Windows-BaseProvider/Admin"
                             symbol="CHANNEL_BASEPROVIDER_ADMIN"
                             type="Admin"/>
                </channels>

                . . .

            </provider>
        </events>
    </instrumentation>

    <localization>
        <resources culture="en-US">
            <stringTable>
                <string id="Provider.Name" value="Microsoft-Windows-SampleProvider"/>
            </stringTable>
        </resources>
    </localization>

</instrumentationManifest>

Хотя Winmeta.xml определяет устаревшие каналы, которые можно импортировать, их не следует использовать, если вы не поддерживаете устаревших потребителей, которые потребляют события из устаревших каналов (например, Приложение или Система). Файл Winmeta.xml включен в пакет Windows SDK.

В следующем примере показано, как определить канал. Необходимо задать атрибуты chid, name и type . Атрибут chid однозначно идентифицирует канал. Каждый идентификатор канала в списке каналов должен быть уникальным. Присвойте атрибуту chid значение, уникальное для каналов, которые перечисляет ваш поставщик; На идентификатор канала ссылается одно или несколько определений событий. Соглашение об именовании канала заключается в использовании имени поставщика и типа канала в форме providername/channeltype.

<instrumentationManifest
    xmlns="http://schemas.microsoft.com/win/2004/08/events" 
    xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    >

    <instrumentation>
        <events>
            <provider name="Microsoft-Windows-SampleProvider"
                guid="{1db28f2e-8f80-4027-8c5a-a11f7f10f62d}"
                symbol="PROVIDER_GUID"
                resourceFileName="<path to the exe or dll that contains the metadata resources>"
                messageFileName="<path to the exe or dll that contains the string resources>"
                message="$(string.Provider.Name)">

                <channels>
                    <importChannel chid="c1"
                                   name="Microsoft-Windows-BaseProvider/Admin"
                                   symbol="CHANNEL_BASEPROVIDER_ADMIN"
                                   />

                    <channel chid="c2"
                             name="Microsoft-Windows-SampleProvider/Operational"
                             type="Operational"
                             enabled="true"
                             />
                </channels>

                . . .

            </provider>
        </events>
    </instrumentation>

    <localization>
        <resources culture="en-US">
            <stringTable>
                <string id="Provider.Name" value="Microsoft-Windows-SampleProvider"/>
            </stringTable>
        </resources>
    </localization>

</instrumentationManifest>