.net - 没有日志库的日志记录

标签 .net architecture logging

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

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

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

最佳答案

绝妙的主意;这些细节让图书馆的作者和消费者的生活更轻松!

DotNetOpenAuth 执行此操作

我知道 DotNetOpenAuth 库的行为方式与您描述的一样。它使用 log4net,但前提是它存在并由消费程序集配置。从它的 README.Bin.html :

log4net.dll If present and v1.2.10, will allow for recording log messages this library emits.



还有an informative page on how to configure DotNetOpenAuth logging在您自己的应用程序中。

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

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

关于.net - 没有日志库的日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5560125/

相关文章:

c# - 在c#中水平附加字符串

android - 架构组件 ViewModel 与 savedInstanceState 包

java - 调用 JAR 时如何保持内部/隐藏数据库连接打开?

python testfixtures.LogCapture 不捕获日志

java - 如何读取eclipse控制台日志?

c# - 如何在 XAML 中显示本地化文本

c# - 如何获取 Winforms 窗体标题栏高度的大小?

.net - OWIN 身份验证管道正确使用 Katana 中间件?

c# - 如何区分逻辑上命名相同的命令模式中的包装层?

java - 为什么文件名为 catalina.out?