将异常信息写入自定义的Windows事件日志中
在.NET中将信息写入Windows事件日志中可能只需要一句话就能解决:调用EventLog的WriteEntry方法。更多的情况下我们需要专门的类别来记录一些异常信息,.NET同样给我们提供了非常便捷方法:调用EventLog的CreateEventSource方法创建自己的事件源,然后再将异常信息写到里面。但是很遗憾,如果你仅仅只是这样的话,在你运行程序的时候是不能成功的,原因很简单:ASPNET用户帐号没有足够的权限来创建事件源。
Google上你可以非常容易的搜索到如何将信息写入事件日志和创建自己的事件源,各大技术网站和Blog上面也有相关文章,但却很少有人提到权限的问题,真怀疑这些个作者写完文章之后有没有运行一下代码,既然是做技术的,在写技术类文章的时候必要的严谨是少不掉的,又不是琼瑶老阿姨写悲情搞笑剧,随便写写就可以了。
可以通过以下两种办法来实现创建自定义事件源:
1。修改Windows注册表,不推荐这种办法,存在一定风险,万一把系统弄崩溃就太不划算了,所以在这里就不提供该方法了。
2。通过创建Installer class并且借助installutil.exe 工具创建自己的事件源。
说一下具体步骤:
在你的Project中添加一个New Item(installer class)
随后在该文件中添加如下代码
System.Diagnostics.EventLogInstaller eventLogInstaller = new System.Diagnostics.EventLogInstaller();
eventLogInstaller.Source = "Source";
eventLogInstaller.Log = "Log";
this.Installers.Add(eventLogInstaller);
编译,随后在命令行模式下输入:installutil.exe 该项目.DLL文件所在目录,之后名为Log的日志类别便会出现在Windows的事件察看其中。
接下来我们可以在任何地方输入以下代码来将信息记录到名为Log的事件日志中
System.Diagnostics.EventLog.WriteEntry("Source","Test",System.Diagnostics.EventLogEntryType.Error);
完整的代码下载
System.Diagnostics.EventLogInstaller eventLogInstaller = new System.Diagnostics.EventLogInstaller();
eventLogInstaller.Source = "Source";
eventLogInstaller.Log = "Log";
this.Installers.Add(eventLogInstaller);
eventLogInstaller.Source = "Source";
eventLogInstaller.Log = "Log";
this.Installers.Add(eventLogInstaller);
System.Diagnostics.EventLog.WriteEntry("Source","Test",System.Diagnostics.EventLogEntryType.Error);