我想通过一个额外的组件扩展我的Eventlog(Windows事件跟踪),我只想记录字符串。我正在使用类似下面的代码。
#include <Evntprov.h>
#include <evntrace.h>
#include <minwindef.h>
// {38F4122A-4D8C-465A-9EFC-F7E632A84ABF}
static const GUID MyApplicationGuid = { 0x38f4122a, 0x4d8c, 0x465a, { 0x9e, 0xfc, 0xf7, 0xe6, 0x32, 0xa8, 0x4a, 0xbf } };
REGHANDLE regHandle = nullptr;
EventRegister(MyApplicationGuid, nil, nil, ®Handle);
EventWriteString(regHandle, TRACE_LEVEL_INFORMATION, 0x0, L"Hello");
EventWriteString(regHandle, TRACE_LEVEL_INFORMATION, 0x0, L", ");
EventWriteString(regHandle, TRACE_LEVEL_INFORMATION, 0x0, L"world");
EventWriteString(regHandle, TRACE_LEVEL_INFORMATION, 0x0, L"!");
EventUnregister(regHandle);
我已经注册了一个正确显示的提供程序,并且这些事件是etl日志文件的一部分,作为通用事件。到目前为止,一切似乎都很好但是当我想将消息添加为列时,我无法看到记录的字符串,因为它们存储在二进制有效负载元素中。
我有办法定义一个事件/模板,将使用EventWriteString完成的跟踪格式化为消息字符串。像“%1”这样的东西? (标题属性STRING_ONLY会自动设置。)
答案 0 :(得分:0)
想出添加一个id为0且单个字符串输出的事件将在“Microsoft Messge Analyzer”中显示字符串。
将以下内容添加到您的清单。
<?xml version="1.0" encoding="UTF-16"?>
<instrumentationManifest xsi:schemaLocation="http://schemas.microsoft.com/win/2004/08/events eventman.xsd" xmlns="http://schemas.microsoft.com/win/2004/08/events" xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:trace="http://schemas.microsoft.com/win/2004/08/events/trace">
<instrumentation>
<events>
<provider name="COMPANY-PRODUCT-PART" guid="{??????-????-????-????-????????????}" symbol="COMPANY_PRODUCT_PART" resourceFileName="UNKNOWN.dll" messageFileName="UNKNOWN.dll">
<events>
<event symbol="DbgStr" value="0" version="0" template="OneStringParamTemplate" message="$(string.Product.1.message)">
</event>
</events>
<templates>
<template tid="OneStringParamTemplate">
<data name="param" inType="win:UnicodeString" outType="xs:string">
</data>
</template>
</templates>
</provider>
</events>
</instrumentation>
<localization>
<resources culture="en-US">
<stringTable>
<string id="Product.1.message" value="%1">
</string>
</stringTable>
</resources>
</localization>
</instrumentationManifest>