【发布时间】:2016-10-21 20:26:15
【问题描述】:
我正准备使用现有的 Serilog 的 SQL Server 接收器,但我意识到最新的预发布和稳定版本不支持 ASP.NET Core。
这个水槽有替代品吗?我应该做些什么?我应该写一个新的水槽吗?
【问题讨论】:
标签: c# asp.net-core-mvc serilog
我正准备使用现有的 Serilog 的 SQL Server 接收器,但我意识到最新的预发布和稳定版本不支持 ASP.NET Core。
这个水槽有替代品吗?我应该做些什么?我应该写一个新的水槽吗?
【问题讨论】:
标签: c# asp.net-core-mvc serilog
Serilog sink for SQL Server 取决于 .NET Core 中尚未包含的某些类型。工作开始重构接收器并删除依赖项,但从那时起,有问题的类型已添加到下一个 .NET Core 版本:
https://github.com/dotnet/corefx/pull/12426
因此,在下一个 .NET Core/.NET Standard 版本之前,Serilog SQL Server 接收器很可能仅支持 .NET Framework,之后将快速添加支持。
在此期间,编写一个您自己的ILogEventSink 的快速实现将是一个合理的解锁方式。
【讨论】:
我无法告诉您应该做什么,但我可以描述几个选项。 GitHub 上的 Sql Server Serilog 提供程序是询问他们打算做什么问题的更好地方。
Serilog 确实在 .Net Core 列车上,与许多其他主流 .Net 项目一样。您是正确的,截至今天,SQL 服务器接收器仅是 .Net 4.5。你可以:
继续开发您的 ASP.Net Core 项目,在您的项目 json 中以 .Net 4.5 为目标,仅构建和部署到 windows 操作系统,但继续使用 SQL server sink。
许多公司正在迁移到 .Net Core,但目标是 .Net 4.x.x,以便在解决框架中的问题的同时保持与现有软件包的 100% 向后兼容性。这对于我的大型项目来说是一个可行的解决方案。
以 .Net Core 为目标,编写自己的日志存储库层来管理自定义 SQL 和数据库日志转储代码。
如果您是核心,这比听起来容易,但需要数据存储库和 IoC 方面的经验。任何需要将日志转储到数据库的代码都必须具有某种“ILoggingRepository”。但是,它确实会重复调用日志记录方法,除了偏离 Microsoft.Logging.Abstractions 中的 ILoggerProvider 接口 - 放弃日志级别的灵活性等,除非您决定重新设计自己的。这是一个可行的解决方案;我从来没有说过它是优雅的。
编写您自己的 Serilog 接收器。
我没有这方面的经验,但我看到了描述如何完成此操作的详细信息的代码示例。我从来没有选择这个选项的原因是担心当我写完我的野兽派数据库接收器时,开源社区会将 Sql Server 版本重新设计为完全兼容核心且独立于数据库的版本。这将是最严厉的解决方案,但也是最强大的解决方案。
.Net Core 可能还有其他可用的接收器,但如果您正在寻找专门的 SQL 服务器,那么您很可能正在使用阻止使用 MongoDB 接收器和文件提供程序等的约束。
【讨论】:
我猜这个问题不是真正的技术问题,而是一个哲学问题,那么我不提出答案,而是考虑:
以我的拙见,微软凭借其Silverlight杀戮、UWP定位和“逃到云端”,认输了其专有软件开发的整个概念,因此解放dotnet平台无非是送给开发者的告别礼物,上当受骗在他们的希望中。
就其本身而言,dotnet 生态系统非常有前途,但它的未来与微软的产品没有什么关系,就像以前一样。至少,我希望作为一名使用 Microsoft 产品超过 20 年的开发人员。因此,专注于具体 Microsoft 产品的通用基础架构库(我指的是当前案例中的 MS SQL Server)现在正在消亡。
因此,结论是:如果你已经有长期的项目,与SQLServer紧密耦合,也许最好对你目前的日志解决方案进行一些努力,否则最好寻找一些日志解决方案,而不是依赖于 MSSQL。可能它应该通过适配器或类似的东西支持不同的存储。
尝试查看this,他们在下一个版本中声明支持核心,至少这是一个实时项目。
【讨论】: