是否有任何SQL Server Serilog接收器来支持.net Core ?
本文关键字:支持 net Core 接收器 Serilog 任何 SQL Server 是否 | 更新日期: 2023-09-27 18:14:30
我打算使用现有的Serilog的SQL Server sink,但我意识到最新的预发布版和稳定版本不支持ASP。净的核心。
这个水槽有替代的吗?我该怎么办?我应该写一个新的水槽吗?
SQL Server的Serilog接收器依赖于。net Core中尚未包含的一些类型。我们开始重构接收器并删除依赖项,但从那时起,有问题的类型已被添加到下一个。net核心版本:
https://github.com/dotnet/corefx/pull/12426由于这个原因,Serilog SQL Server接收器很可能只会保持。net框架,直到下一个。net Core/。. NET标准版本,之后将快速添加支持。
在此期间,编写自己的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。为了保持与现有包的100%向后兼容性,同时在框架中解决了这些问题。
-
目标。net Core,并编写自己的日志存储库层来管理自定义SQL和数据库日志转储代码。
如果你是核心人员,这比听起来容易,但需要有数据存储库和IoC的经验。任何需要将日志转储到数据库的代码都必须具有某种"ILoggingRepository"。但是,除了偏离Microsoft.Logging.Abstractions中的ILoggerProvider接口之外,它确实重复了对日志方法的调用——放弃了日志级别等的灵活性,除非您决定重新设计自己的日志。这是一个可行的解决方案;
-
编写自己的Serilog接收器
我没有这方面的经验,但是我看过描述如何完成这一任务细节的代码示例。我从来没有追求过这个选择的原因是我害怕当我写完我的可恶的数据库sink时,开源社区会把Sql Server版本重新制作成一个完全符合核心和数据库独立的版本。这将是最严厉的解决方案,但也是最健壮的。
可能有其他可用于。net Core的sink,但如果你正在寻找SQL server一个具体的,那么你很可能正在与阻止使用MongoDB sink和文件提供程序等的约束一起工作。
我猜这不是一个真正的技术问题,而是一个哲学问题,那么我不提出答案,而是考虑:
在我看来,微软凭借其Silverlight的杀机、UWP的导向和"逃到云端",承认了其整个专有软件开发理念的失败,因此,dotnet平台的解放只不过是给开发者的告别礼物,欺骗了他们的希望。
就其本身而言,。net生态系统是非常有前途的,但它的未来与微软产品的关系不大,就像以前一样。至少,作为一个与微软产品打交道超过20年的开发人员,我希望是这样。因此,专注于具体微软产品的公共基础设施库(我指的是MS SQL Server)现在正在消亡。
因此,结论是:如果您已经有一个与SQLServer紧密耦合的长期项目,也许最好花一些精力来适应您当前的日志解决方案,否则最好寻找一些不依赖于MSSQL的日志解决方案。也许它应该通过适配器或类似的东西来支持不同的存储。
试着看看这个,他们声明在下一个版本中支持Core,至少这是一个实时项目。