Подтвердить что ты не робот

Журнал событий Windows - как зарегистрировать источник событий?

Я создаю новый источник событий и регистрирую сообщение, используя следующий код:

    static void Main(string[] args)
    {
        if (!EventLog.SourceExists("My Log"))
        {
            EventLog.CreateEventSource("My Application", "My Log");
            Console.WriteLine("Created new log \"My Log\"");
        }

        EventLog myLog = new EventLog("My Log");
        myLog.Source = "My Application";
        myLog.WriteEntry("Could not connect", EventLogEntryType.Error, 1001, 1);
    }

Создан пользовательский журнал событий с именем "Мой журнал" (как и ожидалось), но сообщение регистрируется под "Приложением" node. Что я делаю неправильно?

4b9b3361

Ответ 1

В MSDN следующее примечание:

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

Возможно ли, когда вы пытаетесь выполнить код, который вы ранее пытались записать в журнал приложений, и теперь вам нужно перезагрузить его, чтобы "размонтировать" эту ссылку?

Ответ 2

У вас, кажется, что-то перепуталось где-то там, я думаю.

У вас есть источник (который является вашим приложением), и этот источник связан с журналом, это делается при создании источника Вы немного смешали их в начале вашего кода, на самом деле это должно быть

    if (!EventLog.SourceExists("My Application"))

Я только что написал небольшой код, чтобы помочь мне в этом. источник, зарегистрированный в другой проблеме журнала, с которой я столкнулся, и не хочу вручную удалять источники из журналов. То, что я решил сделать, это проверить, существует ли источник, если он проверяет, что он связан с правильным журналом, если он не удаляет исходный код, теперь, когда он не существует, или f никогда не создавал новый Log Log,

protected const string EventLogName = "MyLog";

private static bool CheckSourceExists(string source) {
  if (EventLog.SourceExists(source)) {
    EventLog evLog = new EventLog {Source = source};
    if (evLog.Log != EventLogName) {
      EventLog.DeleteEventSource(source);
    }
  }

  if (!EventLog.SourceExists(source)) {
    EventLog.CreateEventSource(source, EventLogName);
    EventLog.WriteEntry(source, String.Format("Event Log Created '{0}'/'{1}'", EventLogName, source), EventLogEntryType.Information);
  }

  return EventLog.SourceExists(source);
}

public static void WriteEventToMyLog(string source, string text, EventLogEntryType type) {      
  if (CheckSourceExists(source)) {          
      EventLog.WriteEntry(source, text, type);          
  }
}

Надеюсь, это поможет:)