Почему EventRecord.FormatDescription () возвращает ноль? - PullRequest
9 голосов
/ 23 сентября 2011

При использовании System.Diagnostics.Eventing.Reader.EventLogQuery для чтения событий из журнала событий Windows метод EventRecord.FormatDescription() иногда возвращает ноль. Почему это? В окне просмотра событий есть сообщения о событиях, которые возвращают ноль.

Ответы [ 2 ]

21 голосов
/ 23 сентября 2011

Это связано с ошибкой в ​​.NET Framework.

В основном, чтобы обойти эту ошибку, нужно установить CurrentCulture на "en-US".

Пример:

var beforeCulture = Thread.CurrentThread.CurrentCulture;

try
{
  Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

  using (var session = new EventLogSession(ipOrAddress, userDomain, username, password, SessionAuthentication.Default))
  {
    var query = new EventLogQuery("System", PathType.LogName, queryString)
      {
        ReverseDirection = true,
        Session = session
      };

    using (var reader = new EventLogReader(query))
    {
      for (var record = reader.ReadEvent(); record != null; record = reader.ReadEvent())
      {
        // Read event records
        string message = record.FormatDescription();
      }
    }
  }
}
finally
{
  Thread.CurrentThread.CurrentCulture = beforeCulture;
}

Этот обходной путь is было очень трудно найти, поэтому я решил документировать его в месте, где он будет проиндексирован Google.Я нашел его в старом MS Connect случае , но он был закрыт со статусом "не исправить".

ОБНОВЛЕНИЕ: Ошибка была сообщается и для .NET 4 , а также имеет статус «Отправлено в инженерную группу для рассмотрения» и комментирует, что ошибка может быть исправлена ​​в следующем основном выпуске .NET Framework (v5).

1 голос
/ 05 февраля 2015

так что я боролся с этим уже несколько дней.Я не мог заставить это работать, изменяя культуру.В конце я просто использовал необработанные данные в свойстве Properties записи события.Там есть данные сообщения, просто не красиво.(хотя достаточно хорошо для моих нужд аудита: -))

...