首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nlog.etw扩展不发射ETW

nlog.etw扩展不发射ETW
EN

Stack Overflow用户
提问于 2018-05-14 19:28:34
回答 1查看 354关注 0票数 0

我有一个与nlog集成的多项目VS解决方案。我希望使用我现有的日志记录来发出ETW事件。一次在线搜索让我找到了https://github.com/NLog/NLog.Etw

尽我所能理解README和回购的代码,我试图集成我的解决方案,但它没有工作,我没有看到任何我可以用来调试的原因。

  • 系统: Windows 2012 R2
  • .NET版本: 4.71
  • NLog版本: 4.0.1
  • NLog Etw版本: 4.1.0

这是我的nlog.config (我也尝试过<targets async="true"> ):

代码语言:javascript
复制
<?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文件:

代码语言:javascript
复制
<?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>

问题:

  1. 将etw与nlog集成的推荐方法是什么?还是github上的nlog etw?
  2. 集成ETW和nlog的详细配置步骤是什么?
  3. 如何调试集成可能无法工作的原因?

谢谢!

===更新5-31-2018 ===的建议使用nlog的内部日志来获得更多的调试信息是有帮助的。我现在知道我添加的providerId是不受支持的,但是没有这样的东西,我不清楚我应该如何收集这些nlog ETW事件。通常,创建一个WPRP文件来收集ETW事件,而通常提供提供者的guid来指定要收集哪些事件。所以,如果我不应该指定一个providerId,那么我在制作WPRP文件时会使用哪个提供者id (也称为providerId)?

再次感谢。

EN

回答 1

Stack Overflow用户

发布于 2019-01-29 21:34:13

NLog.ETW v4.2.0已经被释放了。它允许您设置具有自定义提供程序名称的ETW提供程序(如果需要多个名称,请使用多个目标):

代码语言:javascript
复制
<targets async="true">
    <target xsi:type="EtwEventSource"
            name="eetw"
            providerName="MyEventSourceName"
            taskName="${level}"
            layout="${message}"
          />
</targets>

另见:https://github.com/NLog/NLog.Etw

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50337679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档