如何创建lognames在Windows事件系统层次结构?(How do I create a hi

2019-06-24 03:06发布

  • 我登录使用企业库的消息。
  • 我想其中的一些(一般错误和警告)传递到Windows事件系统)。 通过entlib.config我今天路线这些。

该解决方案的工作,到目前为止,这么好。 但是,我有比这个解决方案提供我更多的需求。 我有一个要登录到不同的日志多次安装,但我想他们的名字是合乎逻辑的,直观的在事件查看器。 但是,Windows事件系统不能有两个类别,其中名称中的前8个字符是相同的。 分类名可以更长,但只有前8个字母来区分它们。 如果这种情况发生的.Net实际输出的警告:

只有自定义日志名称的前八个字符是显著,并且已经有另一个日志使用指定的名称的前八个字符的系统上。

目前,我不得不求助于cryptical前缀,但我仍然在具有多个安装在regrads到LOGNAME“碰撞”相互的危险,所以我需要一个更好的解决方案。

然而,在我的计算机上的事件查看器,我可以看到,也有lognames的层次-这正是我需要的。 微软和思科显然已经找到了一种方法来做到这一点:

但是,我怎么可以创建日志这样的层次结构,其中每个应用程序可以安装的次数? 像这样:

CompanyName
  ApplicationName
    Installation1
    Installation2

Answer 1:

.NET 4回答

它看起来像什么,你看到的是从Windows事件跟踪(ETW)的通道。 你可以看到在注册表中的相关项目HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT

要使用这些功能,你就必须使用新的Windows事件日志功能,它取代了事件日志记录从Vista开始API和看起来主要是针对C / C ++开发。 它似乎表明,有些是通过暴露System.Diagnostics.Eventing命名空间 。

我发现ETW的一个很好的概述,以改善调试和性能调整利用ETW 。

好消息是,它看起来像你可以做你想做的。 您需要创建一个包含供应商信息,以及将被记录的事件的XML清单。 然后,你需要使用消息编译器(MC.EXE!)在清单创建头,资源文件和日志类,然后注册供应商。

如果你下载的Microsoft Windows SDK的Windows 7和.NET Framework 4 ,你会发现在Samples\winbase\Eventing\Provider\Simple\CSharp子目录.NET样品溶液应该引导您完成所有步骤。

虽然它确实满足您的等级要求,是挺酷的,用于业务应用的典型的线路,这可能是有点大材小用的复杂性。 另外,通过消息编译器生成的代码是不安全的代码,这样也可以是负。

.NET 4.5答

在.NET 4.5有使用ETW的EventSource的类更好的支持。 见的Windows高速记录:ETW在C#/。NET使用System.Diagnostics.Tracing.EventSource。作一介绍。 还有现在的EventSource事件日志的支持。 见在宣布EventSource的NuGet包-写入Windows事件日志的演练。 基本上,在编译时的清单和清单DLL为每个EventSource的产生和这些可使用wevtutil.exe注册。 随着加入的EventSource和事件日志通道支持这种做法现在看起来是简单的和可行的。

最后,注意对于那些有兴趣在ETW的模式与实践团队有一个应用程序块的语义日志应用程序块 ,可以使用ETW。



Answer 2:

供应商必须命名为形式的“公司 - 产品 - 组件”的东西。 需要明确的是,供应商的名称必须包括2“ - ”符号。 在这个文件可能会发现在这里 。

频道必须以特定的方式写出来,以及他们的名字。 同样, MSDN文档解释了这一点。 您应该为您的频道的形式“公司的产品元件/型”的东西。

这是一个明显的我写了你作为一个例子使用的片段:

<provider name="Our Company-OurApp-Service"
          guid="{4990f5dc-85a0-4660-9ce0-275e027a02d2}"
          symbol="GUID_PROVIDER"
          resourceFileName="C:\Program Files (x86)\Our Company\OurApp\service.exe"
          messageFileName="C:\Program Files (x86)\Our Company\OurApp\service.exe"
          parameterFileName="C:\Program Files (x86)\Our Company\OurApp\service.exe"
          message="$(string.Provider.Name)">
    <channels>
        <channel chid="c1"
                 name="Our Company-OurApp-Service/Operational"
                 type="Operational"
                 symbol="CHANNEL_1"
                 isolation="Application"
                 enabled="true"/>
    </channels>
    ...

我们在事件查看器中看到的文件夹层次是一种错觉。 这的确呈现为刚性3文件夹深层结构供应商和渠道的只是一个平面列表。 这就是为什么在多个文件夹中Microsoft/Windows在其名称中有破折号,而不是进一步嵌套。



文章来源: How do I create a hierarchy of lognames in the Windows event system?