Spi*_*lis 21 .net enterprise-library event-log
这个解决方案有效,到目前为止,非常好.但是,我有更多的需求,而不是这个解决方案为我提供的.我有多个应该登录到不同日志的安装,但我希望它们的名称在事件查看器中是合乎逻辑且直观的.但是,Windows事件系统不能有两个类别,其中名称中的前8个字符相同.类别名称可以更长,但只有前8个字母用于区分它们.如果发生这种情况,.Net实际上会输出警告:
只有自定义日志名称的前八个字符才有意义,并且系统上已经有另一个日志使用给定名称的前八个字符.
目前我不得不求助于密码前缀,但是我仍然面临着多次安装在regrads中相互"碰撞"到logname的危险,所以我需要一个更好的解决方案.
但是,在我的计算机上的事件查看器中,我可以看到还有层次结构的日志名称 - 这正是我需要的.微软和思科显然都找到了这样做的方法:

但是,如何为日志记录创建这样的层次结构,每个应用程序可能安装多次?像这样:
CompanyName
ApplicationName
Installation1
Installation2
Run Code Online (Sandbox Code Playgroud)
Ran*_*ica 22
您看到的是来自Windows事件跟踪(ETW)的频道.您可以在注册表中查看相关项目HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT.
要使用这些功能,您必须使用新的Windows事件日志功能,该功能取代从Vista开始的事件记录 API,看起来主要针对C/C++开发.看来其中一些是通过System.Diagnostics.Eventing命名空间公开的.
我发现ETW的一个很好的概述是用ETW 改进调试和性能调优.
好消息是看起来你可以做你想做的事.您需要创建一个包含提供程序信息的XML清单以及将要记录的事件.然后,您需要使用清单上的消息编译器(MC.EXE!)来创建标头,资源文件和日志记录类,然后注册提供程序.
如果您下载适用于Windows 7和.NET Framework 4的Microsoft Windows SDK,您将在Samples\winbase\Eventing\Provider\Simple\CSharp子目录中找到.NET示例解决方案,该解决方案应引导您完成所有步骤.
虽然它确实符合您的分层要求并且有点酷,但对于典型的业务应用程序而言,这在复杂性方面可能有点过分.此外,消息编译器生成的代码是不安全的代码,因此也可能是否定的.
在.NET 4.5中,使用EventSource类可以更好地支持ETW.有关简介,请参阅Windows高速日志记录:使用System.Diagnostics.Tracing.EventSource在C#/ .NET中的ETW .现在还有EventSource的事件日志支持.请参阅宣布EventSource NuGet包 - 写入Windows事件日志以获取演练.基本上,在编译时,会为每个EventSource生成清单和清单DLL,这些可以使用wevtutil.exe进行注册.通过添加EventSource和Event Log通道支持,这种方法现在看起来很直接且可行.
最后,请注意那些对ETW感兴趣的人,模式和实践团队有一个可以使用ETW 的应用程序块语义记录应用程序块.
| 归档时间: |
|
| 查看次数: |
6774 次 |
| 最近记录: |