是否有 SQL Server Serilog sink 来支持 .Net Core

Is there any SQL Server Serilog sink to support .Net Core

我正要使用现有的 Serilog 的 SQL 服务器接收器,但我意识到最新的预发布和稳定版本不支持 ASP.NET 核心。

这个水槽有替代品吗?我应该做些什么?我应该写一个新的接收器吗?

我想这个问题不是真正的技术问题,而是一个哲学问题,那么我不提出答案,而是考虑:

以我的愚见,微软凭借其对 Silverlight 的扼杀、对 UWP 的定位和 "escape to clouds" 承认了其整个专有软件开发概念的失败,因此 dotnet 平台的解放无非是对开发人员的告别礼物, 被他们的希望欺骗了。

dotnet 生态系统本身是非常有前途的,但它的未来与微软的产品关系不大,就像以前一样。至少,作为一名从事 Microsoft 产品工作超过 20 年的开发人员,我希望如此。因此,专注于具体 Microsoft 产品(在当前情况下我指的是 MS SQL 服务器)的通用基础结构库现在正在消亡。

因此,结论是:如果您已经有与 SQLServer 紧密耦合的长期项目,也许最好在您当前的日志记录解决方案适配上付出一些努力,否则最好寻找一些不依赖于 MSSQL 的日志记录解决方案。可能它应该通过适配器或类似的东西支持不同的存储。

尝试查看 this,他们在下一个版本中声明了核心支持,至少这是一个实时项目。

我无法告诉您您应该做什么,但我可以描述几个选项。 GitHub 上的 Sql 服务器 Serilog 提供程序将是一个更好的地方来询问他们 打算 做什么的问题。

Serilog 确实在 .Net Core 列车上,许多其他主流 .Net 项目也是如此。您是正确的,截至今天,SQL 服务器接收器仅为 .Net 4.5。您可以:

  • 继续开发您的 ASP.Net 核心项目,在您的项目 json 中以 .Net 4.5 为目标,仅构建并部署到 windows OS,但继续使用 SQL 服务器接收器。

    许多公司正在迁移到 .Net Core,但目标是 .Net 4.x.x 以保持与现有软件包的 100% 向后兼容性,同时解决框架中的问题。这对我的大型项目来说是一个可行的解决方案。

  • 以 .Net Core 为目标,并编写您自己的日志存储库层来管理自定义 SQL 和数据库日志转储代码。

    如果您是核心人员,这比听起来容易,但需要具备数据存储库和 IoC 方面的经验。任何需要将日志转储到数据库的代码都必须具有某种 "ILoggingRepository"。但是,它确实会重复调用日志记录方法,此外还会偏离 Microsoft.Logging.Abstractions 中的 ILoggerProvider 接口——放弃日志级别的灵活性等,除非您决定重新设计自己的日志级别。这是一个可行的解决方案;我从没说过它很优雅。

  • 编写您自己的 Serilog 接收器。

我没有这方面的经验,但我看过描述如何完成此操作的详细信息的代码示例。我从未采用此选项的原因是担心当我完成编写我的数据库接收器时,开源社区会将 Sql 服务器版本重新设计为完全兼容核心且独立于数据库的版本。这将是最严厉的解决方案,但也是最稳健的。

.Net Core 可能还有其他可用的接收器,但如果您正在寻找 SQL 服务器,那么您很可能正在使用阻止使用 MongoDB 接收器的约束和文件提供者等。

Serilog sink for SQL Server 依赖一些 .NET Core 中还没有的类型。开始重构接收器并删除依赖项,但从那时起,相关类型已添加到下一个 .NET Core 版本中:

https://github.com/dotnet/corefx/pull/12426

因此,在下一个 .NET Core/.NET Standard 版本发布之前,Serilog SQL Server sink 很可能只支持 .NET Framework,之后将快速添加支持。

在此期间,自己编写 ILogEventSink 的快速实现将是解除阻塞的合理方法。