我有一个与nlog集成的多项目VS解决方案。我希望使用我现有的日志记录来发出ETW事件。一次在线搜索让我找到了https://github.com/NLog/NLog.Etw。
尽我所能理解README和回购的代码,我试图集成我的解决方案,但它没有工作,我没有看到任何我可以用来调试的原因。
这是我的nlog.config (我也尝试过<targets async="true"> ):
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<extensions>
<add assembly="MyCustomLoggingAssembly"/>
<!-- extensions is not needed in NLog 4+ -->
<add assembly="NLog.Etw" />
</extensions>
<targets>
<target name="kinesis" xsi:type="Kinesis" stream="<stream_name>" environment="dev" system="batch" index="<index_name>" region="<region>" maxQueueSize="10000"/>
<target name="console" xsi:type="ColoredConsole" layout="${date:format=MM/dd HH\:mm\:ss} ${logger}|${message}"/>
<target name="filelog" xsi:type="File" fileName="Worker.log" layout="${longdate}|TID-${threadid}|${level:uppercase=true}|${logger}|${message}|${exception:format=ToString,StackTrace}${newline}"/>
<target xsi:type="ExtendedEventTracing"
name="nlogetw"
providerId="ca2d86bc-1b67-419d-9048-962fa24d2cd2"
layout="${longdate}|${uppercase:${level}}|${message}${onexception:|Exception occurred\:${exception:format=tostring}}"/>
</targets>
<rules>
<logger name="Class*" minlevel="Debug" writeTo="nlogetw"/>
<logger name="Class*" minlevel="Trace" writeTo="console"/>
<logger name="Class*" minlevel="Info" writeTo="filelog" />
<logger name="Class*" minlevel="Trace" writeTo="kinesis" />
<logger name="*" minlevel="Trace" writeTo="filelog" />
</rules>
</nlog>
nlogetw <target>,<add assembly="NLog.Etw"/>和writeTo="nlogetw"都是我直接从https://github.com/NLog/NLog.Etw/blob/master/README.md那里得到的。
我假设我需要为目标添加一个providerId属性,尽管我没有看到它的文档。
为了测试这一点,我创建了一个wprp文件来收集“ca2d.”的详细事件。事件提供程序guid i生成并使用wprui收集事件。以下是wprp文件:
<?xml version="1.0" encoding="utf-8"?>
<!-- TODO:
1. Find and replace "NlogTraceLoggingProvider" with the name of your provider.
2. See TODO below to update GUID for your event provider
-->
<WindowsPerformanceRecorder Version="1.0" Author="Microsoft Corporation" Copyright="Microsoft Corporation" Company="Microsoft Corporation">
<Profiles>
<EventCollector Id="EventCollector_NlogTraceLoggingProvider" Name="NlogTraceLoggingProvider">
<BufferSize Value="64" />
<Buffers Value="4" />
</EventCollector>
<!-- TODO:
1. Update Name attribute in EventProvider xml element with your provider GUID, eg: Name="3970F9cf-2c0c-4f11-b1cc-e3a1e9958833". Or
if you specify an EventSource C# provider or call TraceLoggingRegister(...) without a GUID, use star (*) before your provider
name, eg: Name="*MyEventSourceProvider" which will enable your provider appropriately.
2. This sample lists one EventProvider xml element and references it in a Profile with EventProviderId xml element.
For your component wprp, enable the required number of providers and fix the Profile xml element appropriately
-->
<EventProvider Id="EventProvider_NlogTraceLoggingProvider" Name="ca2d86bc-1b67-419d-9048-962fa24d2cd2" />
<Profile Id="NlogTraceLoggingProvider.Verbose.File" Name="NlogTraceLoggingProvider" Description="NlogTraceLoggingProvider" LoggingMode="File" DetailLevel="Verbose">
<Collectors>
<EventCollectorId Value="EventCollector_NlogTraceLoggingProvider">
<EventProviders>
<!-- TODO:
1. Fix your EventProviderId with Value same as the Id attribute on EventProvider xml element above
-->
<EventProviderId Value="EventProvider_NlogTraceLoggingProvider" />
</EventProviders>
</EventCollectorId>
</Collectors>
</Profile>
<Profile Id="NlogTraceLoggingProvider.Light.File" Name="NlogTraceLoggingProvider" Description="NlogTraceLoggingProvider" Base="NlogTraceLoggingProvider.Verbose.File" LoggingMode="File" DetailLevel="Light" />
<Profile Id="NlogTraceLoggingProvider.Verbose.Memory" Name="NlogTraceLoggingProvider" Description="NlogTraceLoggingProvider" Base="NlogTraceLoggingProvider.Verbose.File" LoggingMode="Memory" DetailLevel="Verbose" />
<Profile Id="NlogTraceLoggingProvider.Light.Memory" Name="NlogTraceLoggingProvider" Description="NlogTraceLoggingProvider" Base="NlogTraceLoggingProvider.Verbose.File" LoggingMode="Memory" DetailLevel="Light" />
</Profiles>
</WindowsPerformanceRecorder>
问题:
谢谢!
===更新5-31-2018 ===的建议使用nlog的内部日志来获得更多的调试信息是有帮助的。我现在知道我添加的providerId是不受支持的,但是没有这样的东西,我不清楚我应该如何收集这些nlog ETW事件。通常,创建一个WPRP文件来收集ETW事件,而通常提供提供者的guid来指定要收集哪些事件。所以,如果我不应该指定一个providerId,那么我在制作WPRP文件时会使用哪个提供者id (也称为providerId)?
再次感谢。
发布于 2019-01-29 21:34:13
NLog.ETW v4.2.0已经被释放了。它允许您设置具有自定义提供程序名称的ETW提供程序(如果需要多个名称,请使用多个目标):
<targets async="true">
<target xsi:type="EtwEventSource"
name="eetw"
providerName="MyEventSourceName"
taskName="${level}"
layout="${message}"
/>
</targets>https://stackoverflow.com/questions/50337679
复制相似问题