Журнал событий Windows - как зарегистрировать источник событий? - PullRequest
14 голосов
/ 19 апреля 2010

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

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

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

Ответы [ 2 ]

19 голосов
/ 19 апреля 2010

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

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

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

10 голосов
/ 10 марта 2011

Кажется, вы где-то там все перепутали, я думаю.

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...