使用Serilog的自定义配置提供程序

问题描述

我有一个ASP.NET Core 3.1 Web API应用程序,其中将SerilogSerilog.Sinks.MSSqlServer接收器一起使用。

问题:

  1. 如果无法在appsettings文件中配置设置,是否可以使用一些自定义配置提供程序读取Serilog的MSSQL接收器配置(例如,连接字符串)?
  2. 是否在注册所有必需的依赖项之后在LoggerConfiguration上进行一些设置? (类似于我们使用IPostConfigureOptions所做的事情。)

如果您想知道我在做什么,可以对问题进行高级描述:

在我的组织中,所有应用程序设置都存储在一个公共数据库中。这意味着Serilog MSSqlServer接收器所需的ConnectionString也将位于公共数据库中。

Serilog使用Host中的IHostBuilderProgram.cs级别进行配置。另一方面,从我们的公共数据库中读取设置的服务已在Startup.cs的ASP.NET Core的DI中注册。

我添加了一个名为SerilogPostConfigure的类,该类实现了IPostConfigureOptions<LoggerConfiguration>并将其注册在Startup.cs中,例如services.ConfigureOptions<SerilogPostConfigure>()。在此类中,我注入了所有可以帮助我连接到公共数据库以获得所需的连接字符串的依赖项。但是,永远不会调用此类!我不明白为什么。

解决方法

我认为您应该尝试在ASP.NET Core级别上使用自定义配置提供程序。您可以告诉ASP.NET Core应用程序从自定义位置读取应用程序的配置(默认情况下,该程序从appsettings.json文件和环境变量读取)。

这里是有关创建自定义配置提供程序的文章,该提供程序从数据库中读取配置:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1#custom-configuration-provider

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...