Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C创建自定义事件日志#_C#_.net_Windows Services_Event Log - Fatal编程技术网

C# 如何使用C创建自定义事件日志#

C# 如何使用C创建自定义事件日志#,c#,.net,windows-services,event-log,C#,.net,Windows Services,Event Log,我创建了一个Windows服务。我创建了一个事件日志 public Service1() { InitializeComponent(); this.ServiceName = ConfigurationManager.AppSettings.Get("ServiceName"); string sourceName = ConfigurationManager.AppSettings.Get("ServiceName"); st

我创建了一个Windows服务。我创建了一个事件日志

public Service1()
{
        InitializeComponent();
        this.ServiceName = ConfigurationManager.AppSettings.Get("ServiceName");

        string sourceName = ConfigurationManager.AppSettings.Get("ServiceName");
        string logName = ConfigurationManager.AppSettings["EventLogName"];
        try
        {
            if (!System.Diagnostics.EventLog.Exists(sourceName))
                System.Diagnostics.EventLog.CreateEventSource(sourceName, logName);
            eventLog.Source = sourceName;
            eventLog.Log = logName;
        }
        catch
        {
            eventLog.Source = "Application";
        }
    }
在初始化期间,将安装服务,并且不会创建日志。日志条目位于系统的
应用程序
日志中

我错过了什么

我使用process installer进行安装

 public ProjectInstaller()
 {
        InitializeComponent();
        this.Installers.Add(GetServiceInstaller());
        this.Installers.Add(GetServiceProcessInstaller());
 }

 private ServiceInstaller GetServiceInstaller()
 {
        serviceInstaller.ServiceName = GetConfigurationValue("ServiceName");
        serviceInstaller.Description = GetConfigurationValue("Description");
        serviceInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
        return serviceInstaller;
 }

 private ServiceProcessInstaller GetServiceProcessInstaller()
 {
        serviceProcessinstaller.Account = ServiceAccount.LocalSystem;
        return serviceProcessinstaller;
 }

如何创建事件日志?

将代码更改为以下内容:

if (!System.Diagnostics.EventLog.SourceExists(source: sourceName))
{
    System.Diagnostics.EventLog.CreateEventSource(source: sourceName, logName: logName);
}

请注意,事件日志名称的前8个字符必须与计算机上的所有其他事件日志不同(因此,如果用户的计算机已经有一个名为
“Application”
的日志,则无法创建名为
“Applicat1”
“ApplicationFoobar”的新
事件日志
因为它们与内置的
应用程序
事件日志共享相同的8个字符。

将代码更改为以下内容:

if (!System.Diagnostics.EventLog.SourceExists(source: sourceName))
{
    System.Diagnostics.EventLog.CreateEventSource(source: sourceName, logName: logName);
}

请注意,事件日志名称的前8个字符必须与计算机上的所有其他事件日志不同(因此,如果用户的计算机已经有一个名为
“Application”
的日志,则无法创建名为
“Applicat1”
“ApplicationFoobar”的新
事件日志
因为它们与内置的
应用程序
事件日志共享相同的8个字符。

首先尝试将自动登录设置为false

    this.AutoLog = false;

    if (!System.Diagnostics.EventLog.SourceExists(sourceName)) 
    {        
        System.Diagnostics.EventLog.CreateEventSource(sourceName, logName);
    }

    eventLog.Source = "MySource";
在这份MSDN中,他们似乎完全忽略了这一步。但是,在本MSDN中,他们声明:

如果要写入应用程序日志以外的事件日志,则必须将AutoLog属性设置为false,在服务代码中创建自己的自定义事件日志,并将服务注册为该日志的有效条目源


将自动登录设置为false后,我的自定义日志和事件将按预期显示。

请先尝试将自动登录设置为false

    this.AutoLog = false;

    if (!System.Diagnostics.EventLog.SourceExists(sourceName)) 
    {        
        System.Diagnostics.EventLog.CreateEventSource(sourceName, logName);
    }

    eventLog.Source = "MySource";
在这份MSDN中,他们似乎完全忽略了这一步。但是,在本MSDN中,他们声明:

如果要写入应用程序日志以外的事件日志,则必须将AutoLog属性设置为false,在服务代码中创建自己的自定义事件日志,并将服务注册为该日志的有效条目源


将自动登录设置为false后,我的自定义日志和事件将按预期显示。

ServiceName和Source必须是不同的名称

ServiceName

this.serviceInstaller1.ServiceName = "MaliyeWMService";
if (!System.Diagnostics.EventLog.SourceExists("MaliyeMailService"))
{
  System.Diagnostics.EventLog.CreateEventSource("MaliyeMailService", "MaliyeMailServiceLog");

}
OlayLog.Source = "MaliyeMailService";
来源

this.serviceInstaller1.ServiceName = "MaliyeWMService";
if (!System.Diagnostics.EventLog.SourceExists("MaliyeMailService"))
{
  System.Diagnostics.EventLog.CreateEventSource("MaliyeMailService", "MaliyeMailServiceLog");

}
OlayLog.Source = "MaliyeMailService";

ServiceName和Source必须是不同的名称

ServiceName

this.serviceInstaller1.ServiceName = "MaliyeWMService";
if (!System.Diagnostics.EventLog.SourceExists("MaliyeMailService"))
{
  System.Diagnostics.EventLog.CreateEventSource("MaliyeMailService", "MaliyeMailServiceLog");

}
OlayLog.Source = "MaliyeMailService";
来源

this.serviceInstaller1.ServiceName = "MaliyeWMService";
if (!System.Diagnostics.EventLog.SourceExists("MaliyeMailService"))
{
  System.Diagnostics.EventLog.CreateEventSource("MaliyeMailService", "MaliyeMailServiceLog");

}
OlayLog.Source = "MaliyeMailService";

我试过你的密码。但它没有创建事件日志,无法启动服务。服务显示无法启动服务。System.ArgumentException:源“SyncronizationService”未在日志“SyncronizationLog”中注册。(已在日志“应用程序”中注册。)源属性和日志属性必须匹配,或者您可以将日志设置为空字符串,它将自动与源属性匹配。错误消息请注意,logName必须具有唯一的第一个字符,请检查此链接我尝试了您的代码。但它没有创建事件日志,无法启动服务。服务显示无法启动服务。System.ArgumentException:源“SyncronizationService”未在日志“SyncronizationLog”中注册。(已在日志“应用程序”中注册。)源属性和日志属性必须匹配,或者您可以将日志设置为空字符串,它将自动与源属性匹配。错误消息请注意,logName必须具有唯一的第一个字符,请检查此链接可能重复的可能重复的我刚刚花了5个小时。。。。Tnx MS我看了整个文档都没有提到这个小东西@Mustafa Unal为meI提供的解决方案只花了5个小时。。。。Tnx MS我看了整个文档都没有提到这个小东西@Mustafa Unal解决方案对我有效