EventSource 登录单声道

EventSource logs on mono

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

但是 EventListener class 在单声道上不可用。默认情况下,EventSource 在 linux/mac 记录的事件在哪里?有没有工具可以查看它们?

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

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

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

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

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

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

编辑:抱歉,我有点困惑,回答了另一个问题 :) 现在我明白你说的是 ETW。所以 ETW 是 Windows 的事件跟踪,我怀疑它是在单声道中实现的。事实上,您看到自己有一个 link,您在评论中提供了 EventSource class 只是一个什么都不做的存根。 Mono 有很多这样的存根,因此即使某些功能未实现,您的 .NET 代码也可以编译和 运行。所以你的问题的答案是 - 单声道不支持 ETW。您可以通过检查您在哪个平台上 运行 在 EventSource 实现中解决这个问题,如果您在单声道上 运行 - 不要使用 WriteEvent 而是登录到另一个地方(例如 log4net 文件) ).