我正在使用.NET 6构建一个API,并计划使用Serilog作为记录器。根据https://onloupe.com/blog/serilog-vs-mel/,有两种可能性:
一方面,只使用Serilog有一个缺点,就是我的代码库中的所有内容都需要依赖Serilog,所以结合使用它和Microsoft.Extensions.Logging应该提供更多的灵活性。
另一方面,在https://github.com/serilog/serilog-extensions-logging上,他们显然建议将https://github.com/serilog/serilog-aspnetcore用于.NET核心项目:
ASP.NET核心应用程序应该更喜欢Serilog.AspNetCore和UseSerilog()。
有人知道提出这项建议的理由吗?我觉得这个建议在灵活性方面是矛盾的?
发布于 2022-05-28 08:39:17
我认为建议:
ASP.NET核心应用程序应该更喜欢Serilog.AspNetCore和UseSerilog()。
并不是说在应用程序代码中使用哪种ILogger
抽象--微软或塞利罗格。我认为更多的是选择低级别Serilog.Extensions.Logging包还是更高级别的Serilog.AspNetCore包(这取决于前者)。
Serilog.AspNetCore包引入了一些有用的特性,如请求日志记录和直接与通用主机集成。在ASP.NET核心应用程序中您可能想要的东西。Serilog.Extensions.Logging包更适合于不使用通用主机(例如控制台应用程序)的场景。
关于是更喜欢使用微软的ILogger
抽象还是使用Serilog的:这取决于。在您期望跨不同项目(或公开)共享的库代码中,为了实现最大的兼容性,我可能会坚持使用Microsoft的抽象,而不是强迫不受欢迎的依赖消费者。类似地,如果您认为有可能有一天您想要交换日志框架,那么如果您坚持使用Microsoft,您可能会过得更轻松。
另一方面,您可能更喜欢Serilog API的人机工程学,而不是微软的API,例如,您可能喜欢静态Log
和LogContext
API的方便性,而不需要所有注入记录器的仪式。IDiagnosticContext
抽象(以及上面提到的ASP.NET核心请求记录器)是一种非常强大的日志记录模式。这些都是与塞里罗格“全身心投入”的好理由。
https://stackoverflow.com/questions/70847039
复制相似问题