【问题标题】:Is there a logging facade for the .NET world?.NET 世界有日志外观吗?
【发布时间】:2023-03-05 20:12:01
【问题描述】:

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

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

【问题讨论】:

  • 好问题 - 我也有这个问题。我只花了几分钟就实现了一个 ILog 接口和我最喜欢的 nLog 的实现。让我们创建一个操作系统项目 - 我会加入 :)
  • 已经完成了。请参阅下面的 .NET 通用日志记录链接。
  • 还有一个.NET的SLF:slf.codeplex.com,基于slf4j。
  • 史蒂文,你应该回答这个问题。
  • Microsoft.Extensions.Logging 作为 ASP.NET Core 的一部分,它有几个可以为已建立的日志框架实现的接口,例如存在 Serilog.Extensions.LoggingNLog.Extensions.Logging等我没有尝试过,所以我不知道在 ASP.NET 上下文之外使用它们是否有任何问题。如果不是,我可以看到它成为 .NET 的事实上的日志记录外观

标签: c# .net logging slf4j


【解决方案1】:

对不起,我用了这个东西,我忘了它不是 Apache 版本。它实际上是开源的,是一个称为通用基础设施的项目的一部分。它也称为common logging。它适用于 MS Enterprise、log4net 等。效果很好。

【讨论】:

  • 是的,Common Logging 是 .NET 的日志外观
  • @Steven:没错,但很遗憾,它已经过时了。
  • @abatishchev:2.1.1 于 2012 年 6 月 9 日发布。
  • @ThorbjørnRavnAndersen:我倾向于定义我自己的ILogger 接口并实现一个使用日志框架的适配器(参见here)。这使我的应用程序免受对日志框架的任何引用。换句话说:创建自己的 API。
  • @Steven 很高兴您找到了适合您的程序。我个人发现能够站在别人的肩膀上对我们来说是有好处的,所以我通常依赖于一个日志组件。 slf4j 非常适合那些通用的 api。
【解决方案2】:

看看温莎城堡Logging Facility

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

Serilog 添加了适配器。

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

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

【讨论】:

  • Castle.Services.Logging 似乎消失了。获得 404
  • @Sam7 不,只是链接改变了。每当您发现类似的内容时,请考虑在谷歌上搜索一下以找到新链接(就像我刚才所做的那样),然后向答案提交建议。谢谢!
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    我遇到了同样的问题。看完上面推荐的,我发现了Ninject.Extensions.Logging

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

    它带有 NLog、NLog2 和 log4net 的代理

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

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

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

      • Common.Logging 的适配器?我认为它本身就是一个门面。
      • @nawfal 是的,你是对的,但我敢打赌这不是你第一次看到建立在另一个抽象层之上的抽象层(等等)。它就像一个记录器库 loggint 到另一个日志库一样,例如 Serilog 记录到 NLog 或 Log4Net 或 NLog 记录到 ELMAH。问题应该是它是否有意义。
      【解决方案6】:

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

      也许你可以看看Dapplo.Log,你可以从 NuGet 获得。

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

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

      【讨论】:

        【解决方案7】:

        .NET Core 更新:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-15
          • 2013-06-14
          • 1970-01-01
          • 1970-01-01
          • 2019-02-14
          • 2010-10-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多