如何阅读在Windows服务应用程序中创建的事件日志?

时间:2013-02-22 13:46:14

标签: c# .net logging

我有一个Windows服务应用程序,我在其中创建了eventLog对象。

eventLog.Log = "MyLog"; // I'm not really sure what value to choose here
eventLog.Source = this.ServiceName;

我安装了应用程序,在VS2012中转到:

ServerExplorer - >服务器 - > myDevice - > EventLogs - > MyLog

但我无法阅读此文件。在我的应用程序中,我实现了FileSystemWatcher,在某些事件中,我将信息写入我的日志文件。我如何访问此信息(调试所需)。

1 个答案:

答案 0 :(得分:1)

转到:

组件服务&gt;事件查看器&gt; <应用和服务> MyLog。

您可以通过在搜索区域的“开始”中键入组件服务或转到

来查找组件服务

控制面板,将视图更改为小图标选择管理工具

注意:

我认为您应该更改事件日志源和日志名称,如下所示

eventLog.Source = "ServiceNameSource";
eventLog.Log = "ServiceNameLog"

修改

如果要使用自定义源,请执行以下操作:

第一个选项:您必须以管理员身份运行应用程序。因为否则您的应用程序将无法在安全日志中搜索,它将抛出SecurityException。

        EventLog testEventLog = this.EventLog;
        //Or if you are not using windows service, then:
        //EventLog testEventLog = new EventLog();
        testEventLog.Source = "TestServiceSource";
        testEventLog.Log = "TestServiceLog";

        //If log source doesn't exists create new one
        if (!System.Diagnostics.EventLog.SourceExists(testEventLog.Source))
        {
            System.Diagnostics.EventLog.CreateEventSource(testEventLog.Source, testEventLog.Log);
        }

第二个选项:您不必以管理员身份运行应用程序。但它不会搜索安全日志。

        EventLog testEventLog = this.EventLog;
        //Or if you are not using windows service, then:
        //EventLog testEventLog = new EventLog();
        testEventLog.Source = "TestServiceSource";
        testEventLog.Log = "TestServiceLog";

        bool eventSourceExists = false;
        try
        {
            eventSourceExists = System.Diagnostics.EventLog.SourceExists(testEventLog.Source);
        }
        catch(System.Security.SecurityException)
        {           
            eventSourceExists = fasle;
        }

        //If log source doesn't exists create new one
        if (!eventSourceExists)
        {
            System.Diagnostics.EventLog.CreateEventSource(testEventLog.Source, testEventLog.Log);
        }