在Windows服务程序中logging事件

我已经创build了一个Windows服务程序,我希望我的错误严格写入Windows事件日志。 所以我从代码项目文章中遵循这些步骤:

http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

但是当我启动或停止服务时,我看不到在事件查看器窗口中创build的事件日志中logging的任何自定义日志消息。 另外如何指定消息是由于错误还是仅仅是信息?

首先, MSDN是你的朋友。 确保你检查链接,因为有一些潜在的问题值得了解。

本质上,你创build一个EventLog对象:

this.ServiceName = "MyService"; this.EventLog = new System.Diagnostics.EventLog(); this.EventLog.Source = this.ServiceName; this.EventLog.Log = "Application"; 

如果上述来源不存在,您还需要创build一个来源:

 ((ISupportInitialize)(this.EventLog)).BeginInit(); if (!EventLog.SourceExists(this.EventLog.Source)) { EventLog.CreateEventSource(this.EventLog.Source, this.EventLog.Log); } ((ISupportInitialize)(this.EventLog)).EndInit(); 

然后简单地使用它:

 this.EventLog.WriteEntry("My Eventlog message.", EventLogEntryType.Information); 

其实很简单

我终于通过结合各种StackOverflow答案和从MSDN得到这个工作。

首先包含以下命名空间

 using System.ComponentModel; using System.Diagnostics; 

然后在你的构造函数中设置日志

  public UserService1() { //Setup Service this.ServiceName = "MyService2"; this.CanStop = true; this.CanPauseAndContinue = true; //Setup logging this.AutoLog = false; ((ISupportInitialize) this.EventLog).BeginInit(); if (!EventLog.SourceExists(this.ServiceName)) { EventLog.CreateEventSource(this.ServiceName, "Application"); } ((ISupportInitialize) this.EventLog).EndInit(); this.EventLog.Source = this.ServiceName; this.EventLog.Log = "Application"; } 

使用方法如下:

  protected override void OnStart(string[] args) { base.OnStart(args); this.EventLog.WriteEntry("In OnStart"); }