没有日志记录库的日志记录

Iva*_* G. 5 .net architecture logging

这是"问题".我开发的每个库都记录了一些内容,但是我不想让库用户知道这一点并安装我将使用的log4net或类似的日志记录实现.聪明人如何创建独立程序集?

对于库用户来说,记录输出并不重要,除非他或她真的想看到调试/信息输出.在这种情况下,他将安装log4net并告诉库通过配置文件以某种方式使用它.否则我想发送我的库而没有任何不相关的依赖.这可能吗?有什么选择?

在C++中,我只需创建几个dll/so(有和没有日志记录)静态链接它们与所需的库集,如果有人需要一个启用了日志的库,他只需用另一个版本覆盖它.

Jos*_*aum 4

好主意;诸如此类的细节可以让图书馆的作者和消费者的生活变得更轻松!

DotNetOpenAuth 执行此操作

我知道 DotNetOpenAuth 库的行为方式与您描述的方式相同。它使用 log4net,但前提是它存在并由使用程序集配置。来自其 README.Bin.html:

log4net.dll 如果存在并且 v1.2.10,将允许记录该库发出的日志消息。

还有一个有关如何在您自己的应用程序中配置 DotNetOpenAuth 日志记录的信息页面。

[编辑] 我检查了他们的源代码,他们动态检查 log4net 程序集并加载+连接它(如果存在)(在 Log4NetLogger.cs 和 Logger.cs 中)。正如您在下面的评论中提到的,他们在编译期间需要 log4net,因为它在多个地方被引用。巧妙之处在于,由于检查失败时会跳过所有特定于 log4net 的代码,因此当 log4net 程序集丢失时不会出现运行时问题。

DotNetOpenAuth 是一个开源项目,因此您应该能够通过浏览其初始化代码来模仿他们的方法。