C# 是否有一个.NET世界的日志外观?

C# 是否有一个.NET世界的日志外观?,c#,.net,logging,slf4j,C#,.net,Logging,Slf4j,我对.NET堆栈有点陌生,我想知道是否有一个与.NET平台相当的。对我来说,登录到Facade并能够根据需要交换日志实现才有意义。此外,当我需要使用第三方库时,slf4j中可用的包装器API为我节省了很多时间,该库是根据我没有使用的单个日志框架编写的 是否有一个项目在log4net、nLog和Enterprise Library等记录器之间充当门面?是否有包装器允许我以快捷方式调用这些库并将它们定向到另一个库?我是否应该启动一个开源项目来自己做这件事?这个问题是重复的吗?因为我不知道该怎么问?相

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


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

对不起,我使用了这个东西,但我忘了它不是Apache版本。它实际上是开源的,是一个叫做公共基础设施的项目的一部分。它也被称为。它与MS Enterprise、log4net和其他工具配合使用。很好用。

看看温莎城堡吧

基本代码是。Log4net适配器。NLog适配器

为添加了适配器

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


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

我正在合并,因为它似乎支持开箱即用。

我也遇到了同样的问题。在浏览了上面推荐的内容后,我发现

这很好,因为不管怎样,正面与DI结合在一起最有意义

它带有NLog、NLog2和log4net的代理

下面是一个关于如何将其与NLog结合使用的好例子:


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

,因为它是由另一个有趣的日志包装器编写的,名为。到今天为止,它可能是其中最完整的。大多数其他的,但记录方便,是相当过时的,只支持最老的伐木工人

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


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

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

也许你可以看看,你可以从NuGet那里得到

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

它可能还不完美,我欢迎拉取请求或票证。

.NET Core的更新:

  • LibLog--嵌入式日志facade,嵌入到项目中的源代码nuget包。自动检测并使用NLog、log4net、Serilog、LoupeLog

  • Microsoft:Microsoft.Extensions.Logging.Abstractions-。支持NETCore

  • 通用日志-。NETCore从3.4.1开始支持,未处于积极开发阶段


好问题-我也有这个问题。我花了几分钟实现了一个ILog接口,并实现了我最喜欢的nLog。让我们创建一个OS项目-我将加入:)已经完成。参见下面的.NET通用日志链接。还有一个基于slf4j.Steven的.NET SLF:,你应该回答这个问题。作为ASP.NET核心的一部分,它有两个接口,可以为已建立的日志框架实现,例如,存在
Serilog.Extensions.logging
NLog.Extensions.Logging
等。我还没有尝试过,所以我不知道在ASP.NET上下文之外使用它们是否有任何问题。如果不是的话,我可以看到它成为.NETYep的事实上的日志外观,公共日志是的日志外观。NET@Steven:是的,但不幸的是它太过时了。@abatishchev:2.1.1于6月9日发布,2012.@Thorbjørnravandersen:我倾向于定义自己的
ILogger
接口,并实现一个适配器到using logging框架(请参阅)。这使我的应用程序不受对日志框架的任何引用的影响。换句话说:创建你自己的API。@史蒂文很高兴你找到了一个适合你的过程。我个人发现,能够站在别人的肩膀上对我们是一种好处,所以我通常依赖于日志组件。slf4j非常适合作为这些服务的通用api。Castle.Services.Logging似乎已经消失了。得到404@Sam7没有,只是链接改变了。每当你发现这样的事情,请考虑Google有点发现新的链接(正如我刚才那样),然后提交一个建议的答案。谢谢通用日志的适配器?我假设它本身就是一个facade。@nawfal是的,你是对的,但我打赌这不是你第一次看到一个抽象层建立在另一个抽象层之上(等等)。它与日志库loggint到另一个日志库一样,比如Serilog到NLog或Log4Net或NLog到ELMAH。问题应该是它是否有意义。