为什么EventRecord.FormatDescription()返回null?

时间:2011-09-23 15:45:58

标签: c# .net event-log

使用System.Diagnostics.Eventing.Reader.EventLogQuery从Windows事件日志中读取事件时,EventRecord.FormatDescription()方法有时会返回null。为什么是这样?在事件查看器中,有关于事件的消息返回null。

2 个答案:

答案 0 :(得分:20)

这是由于.NET框架中的一个错误。

基本上你需要做的就是解决这个bug是将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;
}

这个解决方法 很难找到,所以我想我会把它记录在一个由Google编制索引的地方。我在一个旧的MS Connect case中找到它,但它已被关闭,状态为“不会修复”。

<强>更新 该错误也是reported for .NET 4,状态为“发送给工程团队供考虑”,并发表评论,暗示可能会在下一个主要的.NET框架版本(v5)中修复该错误。

答案 1 :(得分:1)

所以我也一直在努力解决这个问题。我无法通过改变文化来实现它。最后,我只使用了事件记录的Properties属性中的原始数据。消息数据在那里,它只是不漂亮。 (尽管我的审计需求足够好了: - ))