.NET中是否有内置的日志框架?

6
简单问题:请看标题。我正在使用.NET 3.5。
详细说明: 我正在构建一个插件,该插件将在运行时加载到第三方应用程序中。主要应用程序使用log4net作为其日志记录框架。但是,它没有公开根记录器,因此我们无法记录日志。(我已向上游开发人员提出了此问题,他们将在将来的版本中修复它,因此在此期间我需要想出其他解决方法)
系统的另一个限制是,当它收到通知应该加载一个本地系统中不存在的插件时,它将从连接到的服务器上拉取该插件(如果服务器上存在),但它只能拉取包含插件的程序集。这意味着不能部署任何外部程序集和.config或任何其他文件。
这使我只能使用内置的.NET程序集和我的插件程序集中的所有内容。但是,我不想通过构建自己的日志记录框架来重复发明轮子,因此我想知道解决此问题的最佳方法是什么。
我更喜欢记录到文件中,并希望避免将内容转储到Windows事件日志中。

“它不会暴露根记录器” - 你不能只添加对log4net.dll的引用并直接访问根记录器吗? - Joe
1
我尝试创建自己的根记录器并尝试使用父应用程序的记录器,但都没有成功。Log4net每个应用程序只允许一个根记录器,并且父应用程序已经创建了一个。如果他们在某个地方公开了它,我就可以使用它,但事实并非如此。我不确定是每个应用程序一个根记录器还是每个AppDomain一个根记录器。如果是每个AppDomain一个根记录器,我可以尝试从我的插件创建自己的AppDomain,然后创建自己的根记录器。 - alimbada
2个回答

10

有两个主要的选择:

TraceDebug 类是 .NET 框架(位于 System.Diagnostics 命名空间中)中的一部分,它们可能是您的最佳选择。 它们提供了轻量级记录日志到各种可运行时配置的侦听器的工具,可以写入文件、事件日志和其他几个地方。

看起来您不能向应用程序添加任何额外的类,但如果可以的话,我建议使用 Microsoft Enterprise Library。虽然它是一个外部记录日志框架,但由 Microsoft 提供,并且通常与 .NET 代码兼容。


我最初考虑过Enterprise Library,但在确认它是外部库后,我就停止了追踪这个思路。现在我会先尝试使用Trace和Debug。干杯 :) - alimbada

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接