这就是“问题”。我开发的每个库都记录了一些东西,但是我不想要求库用户知道这一点,也不想安装我将使用的log4net或类似的日志实现。聪明人是如何创建独立的程序集的?
记录输出对于库用户来说并不重要,除非他或她真的想要查看debug/info输出。在这种情况下,他将安装log4net,并通过配置文件告诉库以某种方式使用它。否则,我希望我的库没有任何不相关的依赖项。这个是可能的吗?有哪些选择?
在C++中,我只需创建几个dll/so (有日志记录和无日志记录),将它们静态地链接到所需的库集,如果有人需要一个启用了日志记录的库,他只需用另一个版本覆盖它。
发布于 2011-04-06 09:35:02
好主意;像这样的细节让库的作者和使用者的生活都变得更容易!
DotNetOpenAuth执行此操作
我知道DotNetOpenAuth库的行为就像你所描述的那样。它使用log4net,但前提是它存在并由使用程序集配置。从它的README.Bin.html:
log4net.dll如果存在,v1.2.10将允许记录此库发出的日志消息。
在你自己的应用中也有an informative page on how to configure DotNetOpenAuth logging。
我已经检查过他们的源代码,他们动态地检查log4net程序集,如果存在的话就load+wire它(在Log4NetLogger.cs &Logger.cs中)。正如您在下面的注释中提到的,它们在编译期间需要log4net,因为它在多个地方被引用。巧妙之处在于,因为在检查失败时会跳过所有特定于log4net的代码,所以当程序集缺少时,就不会出现log4net运行时问题。
DotNetOpenAuth是一个开源项目,因此您应该能够通过浏览它们的初始化代码来模仿它们的方法。
发布于 2011-04-06 09:10:48
这里有一个很好的跟踪介绍,这是我喜欢使用的,您的程序集的使用者也可以使用它。
http://www.devx.com/codemag/Article/22040
发布于 2011-04-06 11:59:34
我能看到的唯一选择就是用你的应用程序完全封装一些东西;有两个选择:
不过(据我所知)底线是,日志记录(config)通常是人们需要在某些时候弄乱的东西,因为它通常是特定于环境的,所以我怀疑你可以保护所有用户不需要一直了解它。
https://stackoverflow.com/questions/5560125
复制相似问题