.NET 世界是否有日志外观?

问题描述 投票:0回答:8

我对 .NET 堆栈有些陌生,我想知道是否有一个等同于 .NET 平台的 slf4j。对我来说,登录 Facade 并能够根据需要交换日志实现是很有意义的。此外,当我需要使用针对我未使用的单个日志记录框架编码的第三方库时,slf4j 中可用的包装器 API 为我节省了很多时间。

是否有一个项目充当 log4net、nLog 和 Enterprise Library 等记录器之间的门面?是否有允许我快捷调用这些库并将它们定向到另一个库的包装器?我应该自己开始一个开源项目来做这件事吗?这个问题是否重复,因为我不知道正确的提问方式?相反,使用面向切面编程的常见方法是这样做吗?

c# .net logging slf4j
8个回答
20
投票

对不起,我用过这个东西,但我忘了它不是 Apache 版本。它实际上是开源的,并且是称为公共基础设施的项目的一部分。它也被称为 common logging。它适用于 MS Enterprise、log4net 等。它运作良好。


10
投票

看看温莎城堡 Logging Facility

基本代码在这里。 Log4net 适配器在这里。 NLog 适配器在这里.

Serilog添加适配器。

如果没有适配器,则支持 ConsoleLogger、DiagnosticsLogger、StreamLogger 和 NullLogger。

为任何其他日志框架编写适配器非常容易。


9
投票

我正在合并 Simple Logging Facade 因为它似乎支持 The Object Guy's Logging Framework for .Net 开箱即用。


7
投票

.NET Core 更新:


6
投票

我有同样的问题。经过上面推荐的那些之后,我发现了Ninject.Extensions.Logging

这很棒,因为外观与 DI 结合起来最有意义

它带有 NLog、NLog2 和 log4net 的代理。

这是一个很好的例子,说明如何将它与 NLog 结合使用: http://blog.tonysneed.com/2011/10/09/using-nlog-with-dependency-injection/

我明白,这个问题已经有几年了,但由于其他用户的完整性,我仍然选择发布这个“解决方案”


4
投票

自从写完这篇文章后,另一个有趣的日志记录包装器 Fody.Anotar 出现了。截至今天,它可能是所有这些中最完整的。大多数其他的,但 Logging Faciliy,都已经过时了,只支持最老的记录器。

它具有适用于 NLog、Log4Net、Serilog、CommonLogging、Catel、LibLog、MetroLog、NServiceBus 和 Splat 的适配器,并允许您为自己的库创建适配器。

可以使用Nuget安装。寻找 Anotar.*.Fody 包,例如 Anotar.NLog.Fody.


0
投票

不知何故,我发现这里的所有解决方案都不令人满意,尤其是对于库/API。虽然我从没想过我会这样做,但实际上我写了一个开源“记录器”来处理大多数问题。

也许你可以看看Dapplo.Log,你可以从NuGet中获取它。

想法是在你的库中使用 Dapplo.Log,使用它的项目可以直接(在需要时)将任何日志输出到他们选择的记录器。可以在测试中找到引导输出的示例,以及一些主要框架的实现here.

它可能还不完美(还),我欢迎 pull-requests 或 tickets.


0
投票

发现自己处于这种情况,我花了一些时间阅读所有答案并研究一个好的解决方案。大多数提议的堆栈/框架/抽象现在都已经过时,并且当前不再维护或不再流行。

然后我遇到了现在已弃用的 LibLog,其自述文件明确推荐

Microsoft.Extensions.Logging.Abstractions
因为它现在是 .NET 生态系统中事实上的标准日志记录接口”。

(作为记录,

Microsoft.Extensions.Logging.Abstractions
现在包含在 .NET Runtime 之后它从 ASP .NET Logging 移到那里

© www.soinside.com 2019 - 2024. All rights reserved.