EventLog.CreateEventSource не создает пользовательский журнал - PullRequest
24 голосов
/ 14 декабря 2009

У меня есть такой код:

EventLog.CreateEventSource("myApp", "myAppLog");
EventLog.WriteEntry("myApp", "Test log message", EventLogEntryType.Error);

Теперь, если я что-то пропустил, прочитав MSDN, это должно привести к созданию нового журнала «myAppLog» в средстве просмотра событий, и в этот новый журнал должна быть добавлена ​​запись с именем источника «myApp». Но я не могу создать новый журнал. Это всегда просто записывает сообщение журнала ошибок в журнал приложений, с источником «myApp» - «myAppLog» нигде не видно. Что я делаю неправильно? Я вошел в систему как администратор.

Ответы [ 6 ]

39 голосов
/ 14 декабря 2009

Возможно ли, что вы уже использовали источник "myApp" при записи в стандартный журнал приложений? Если так в соответствии с MSDN:

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

http://msdn.microsoft.com/en-us/library/2awhba7a.aspx (примерно на полпути вниз по странице)

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

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

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

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

4 голосов
/ 14 декабря 2009

Возможно, вы забыли установить свойство Source в вашем EventLog.

Это должно выглядеть примерно так:

        if(!EventLog.SourceExists("MySource"))
        {
            EventLog.CreateEventSource("MySource", "MyNewLog");
        }

        EventLog myLog = new EventLog();
        myLog.Source = "MySource";

        myLog.WriteEntry("Writing to event log.");

Вот статья MSDN для справки.

0 голосов
/ 21 июня 2017

По сути, самое простое решение - закрыть визуальную студию и работать в режиме администратора. Тогда вы сможете решить эту ошибку

0 голосов
/ 27 мая 2013

Если вы проверили все предложения в других ответах, прочитайте следующее

С MSDN

Операционная система сохраняет журналы событий в виде файлов. Когда вы используете EventLogInstaller или CreateEventSource для создания нового журнала событий, связанный файл сохраняется в каталоге% SystemRoot% \ System32 \ Config на указанном компьютере. Имя файла задается добавлением первых 8 символов свойства Log с расширением имени файла «.evt».

Убедитесь, что первые 8 символов уникальны.

0 голосов
/ 14 декабря 2009

Вы установили источник на свой EventLog?

С MSDN Артикул .

Вы должны установить свойство Source в экземпляре компонента EventLog, прежде чем сможете записывать записи в журнал. Когда ваш компонент записывает запись, система автоматически проверяет, зарегистрирован ли указанный вами источник в журнале событий, в который записывает компонент, и при необходимости вызывает CreateEventSource. В общем, создайте новый источник событий во время установки вашего приложения. Это позволяет операционной системе обновить список зарегистрированных источников событий и их конфигурацию. Если операционная система не обновила свой список источников событий, и вы пытаетесь записать событие с новым источником, операция записи завершится неудачно. Если создание источника во время установки невозможно, попробуйте создать источник задолго до первой операции записи, возможно, во время инициализации приложения. Если вы выберете этот подход, убедитесь, что ваш код инициализации работает с правами администратора на компьютере. Эти права необходимы для создания новых источников событий.

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