1

我正在使用 EventSource 在我的库中记录事件。该库是跨平台的,这意味着它可以被 linux/mac 用户使用。我知道 EventSource 如何在 Windows 上工作。用户可以使用 PerfView 或 Logman 工具等工具查看默认日志,或者实现 EventListener 类将日志定向到不同的位置。

但是 EventListener 类在单声道上不可用。在 linux/mac 上默认 EventSource 记录的事件在哪里?是否有任何工具可以查看它们?

如果需要更多详细信息,请告诉我。

4

1 回答 1

1

只需在此处查看 EventLog 的源代码。在那里你会看到单声道上有 3 个事件日志实现:

  1. Windows 事件日志(显然只适用于 Windows)
  2. 本地文件甚至日志(记录到本地文件)
  3. 空事件日志 - 只删除您记录的所有内容。

它如何选择一个?它查看环境变量 MONO_EVENTLOG_TYPE。如果它不存在,并且您不在 Windows 上 - 甚至选择了 null 日志(这应该回答您的问题,默认情况下您的日志将去哪里)。

如果变量存在并且等于“本地” - 它将记录到本地文件。如果您想知道它将把这些文件放在哪里,请看这里。您将在 linux 上看到此类日志的默认路径是“/var/lib/mono/eventlog”。

总而言之-如果您开发跨平台库,请考虑使用纯 EventLog 以外的其他东西(像 log4net 之类的库已经很好,并且可配置,并且也可以登录到 EventLog,以及其他选项)。如评论中所述 - 您确实可以使用 SetEnvironmentVariable 为当前进程设置该环境变量,但其他问题仍然有效。

编辑:对不起,我有点困惑并回答了另一个问题:) 现在我明白你的意思是 ETW。所以 ETW 是Windows的事件跟踪,我怀疑它是在单声道中实现的。事实上,您看到自己在评论中提供的链接中指出 EventSource 类只是一个不执行任何操作的存根。Mono 有很多这样的存根,因此即使某些功能没有实现,您的 .NET 代码也可以编译和运行。因此,您的问题的答案是 - 单声道不支持 ETW。您可以通过检查在 EventSource 实现中运行哪个平台以及是否在单声道上运行来解决此问题 - 不要使用 WriteEvent 而是登录到另一个地方(例如 log4net 文件)。

于 2015-09-22T10:17:00.937 回答