首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用日志库进行日志记录

不使用日志库进行日志记录
EN

Stack Overflow用户
提问于 2011-04-06 08:17:53
回答 5查看 1K关注 0票数 5

这就是“问题”。我开发的每个库都记录了一些东西,但是我不想要求库用户知道这一点,也不想安装我将使用的log4net或类似的日志实现。聪明人是如何创建独立的程序集的?

记录输出对于库用户来说并不重要,除非他或她真的想要查看debug/info输出。在这种情况下,他将安装log4net,并通过配置文件告诉库以某种方式使用它。否则,我希望我的库没有任何不相关的依赖项。这个是可能的吗?有哪些选择?

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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是一个开源项目,因此您应该能够通过浏览它们的初始化代码来模仿它们的方法。

票数 4
EN

Stack Overflow用户

发布于 2011-04-06 09:10:48

这里有一个很好的跟踪介绍,这是我喜欢使用的,您的程序集的使用者也可以使用它。

http://www.devx.com/codemag/Article/22040

票数 3
EN

Stack Overflow用户

发布于 2011-04-06 11:59:34

我能看到的唯一选择就是用你的应用程序完全封装一些东西;有两个选择:

  • 采用一个开源日志框架,并将其源代码烘焙到您的应用程序中(因此,当有人安装您的应用程序时,他们也会无意中安装了记录器)。这里的假设是,您的安装过程将涵盖所需的任何内容,或者,您以这样一种方式将其烘焙,使得不会向它们公开任何(重要的)内容。
  • 采用日志记录框架并将其添加到您的项目中,但只是作为一个干净的依赖项-而不是在代码级“烘焙”。例如,您可以使用MS EntLibs执行此操作,通过提供默认配置(并在安装过程中包含EntLib DLL),您可以成功地屏蔽用户必须执行的任何操作。

不过(据我所知)底线是,日志记录(config)通常是人们需要在某些时候弄乱的东西,因为它通常是特定于环境的,所以我怀疑你可以保护所有用户不需要一直了解它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5560125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档