Как создать собственный журнал событий, используя C # - PullRequest
1 голос
/ 06 января 2012

Я создал службу 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";
        }
    }

Во время инициализации служба устанавливается, а журнал не создается. Записи журнала находятся в Application журнале системы.

Что я пропустил?

Я использовал установщик процесса для установки

 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;
 }

Как создать журнал событий?

Ответы [ 3 ]

3 голосов
/ 06 января 2012

измените свой код на следующий:

    if (!System.Diagnostics.EventLog.SourceExists(sourceName))
            System.Diagnostics.EventLog.CreateEventSource(sourceName, logName);
0 голосов
/ 29 марта 2015

ServiceName и Source должны иметь разные имена.

ServiceName

this.serviceInstaller1.ServiceName = "MaliyeWMService";

Источник

if (!System.Diagnostics.EventLog.SourceExists("MaliyeMailService"))
{
  System.Diagnostics.EventLog.CreateEventSource("MaliyeMailService", "MaliyeMailServiceLog");

}
OlayLog.Source = "MaliyeMailService";
0 голосов
/ 09 апреля 2014

Попробуйте сначала установить для AutoLog значение false.

    this.AutoLog = false;

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

    eventLog.Source = "MySource";

В этом пошаговом руководстве по MSDN они, похоже, полностью пропустили этот шаг. Однако в этом MSDN " Как: " они заявляют:

Если вы хотите записывать в журнал событий, отличный от журнала приложений, вы должны установить для свойства AutoLog значение false, создать свой собственный журнал событий в коде своих служб и зарегистрировать свою службу в качестве действительного источника записей для этого. журнал.

После того, как я установил для AutoLog значение false, мой пользовательский журнал и события отображались, как и ожидалось.

...