使用带有或不带有 Microsoft.Extensions.Logging 的 Serilog 更好吗?

Dar*_*rio 15 serilog microsoft.extensions.logging

我正在使用 .NET 6 构建一个 API,并计划使用 Serilog 作为记录器。根据https://onloupe.com/blog/serilog-vs-mel/有两种可能性:

  • 专门使用 Serilog
  • 使用 Microsoft.Extensions.Logging 作为日志 API + Serilog 作为日志框架

一方面,专门使用 Serilog 的缺点是我的代码库中的所有内容都将依赖于 Serilog,因此将其与 Microsoft.Extensions.Logging 结合使用应该提供更大的灵活性。

另一方面,在https://github.com/serilog/serilog-extensions-logging上,他们明确建议对 .NET Core 项目使用https://github.com/serilog/serilog-aspnetcore :

ASP.NET Core 应用程序应该更喜欢 Serilog.AspNetCore 和 UseSerilog()。

有谁知道这个建议的原因,它在灵活性方面看起来与我相矛盾?

bre*_*ret 14

我认为推荐:

ASP.NET Core 应用程序应该更喜欢 Serilog.AspNetCore 和 UseSerilog()。

并不是真正谈论ILogger在应用程序代码中使用哪种抽象——Microsoft 还是 Serilog。我认为更多的是在低级别 Serilog.Extensions.Logging 包或更高级别 Serilog.AspNetCore 包之间进行选择(这取决于前者)。

Serilog.AspNetCore 包引入了一些有用的功能,例如请求日志记录以及直接与通用主机集成。您可能在 ASP.NET Core 应用程序中需要的东西。Serilog.Extensions.Logging 包更适合不使用通用主机(例如控制台应用程序)的情况。

关于是否更喜欢使用 Microsoft 的ILogger抽象或 Serilog 的抽象:这取决于情况。在您希望在不同项目(或公开)之间共享的库代码中,我可能会坚持 Microsoft 的抽象以获得最大兼容性,并且不会强制对消费者产生不受欢迎的依赖。同样,如果您认为有一天您可能想要更换日志框架,那么如果您坚持使用 Microsoft API,您可能会更轻松。

另一方面,与 Microsoft 的 API 相比,您可能更喜欢 Serilog API 的人体工程学设计。例如,也许您喜欢静态LogLogContextAPI 的便利性,而无需注入记录器的所有仪式。抽象IDiagnosticContext(以及上面提到的 ASP.NET Core 请求记录器)是一种非常强大的日志记录模式。这些都是“全力以赴”使用 Serilog 的充分理由。

  • 该问题要求澄清[Serilog.Extensions.Logging README](https://github.com/serilog/serilog-extensions-logging#aspnet-core-instructions)中的这句话:_“ASP.NET Core应用程序应该更喜欢 Serilog.AspNetCore 和 UseSerilog()。"_ 这是关于在 Serilog.Extensions.Logging 与 Serilog.AspNetCore 之间进行选择。该问题还询问有关何时/是否直接使用 Serilog 的 API 与通过 Microsoft.Extensions.Logging 抽象的建议。我试图在回答中解决这两个问题。 (3认同)