在 AppSettings.json 中配置 Serilog 接收器 MsSqlServer 的列选项

Jad*_*wan 6 appsettings serilog asp.net-core-2.0

我正在尝试确定是否可以在appsettings.jsonASP.Net Core 2 项目的文件中配置 serilog 接收器 mssqlserver 的列选项。

我在文件中创建并配置记录器Program.cs

        public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
            .AddEnvironmentVariables()
            .Build();

        public static int Main(string[] args)
        {



            Log.Logger = new LoggerConfiguration()
                //.Enrich.WithProperty("AppName", "One Badass App") // Adds property to XML structure in properties column
                .ReadFrom.Configuration(Configuration)
                .CreateLogger();

                try
                {
                    Log.Information("Starting web host");
                    BuildWebHost(args).Run();
                    return 0;
                }
                catch (Exception ex)
                {
                    Log.Fatal(ex, "Host terminated unexpectedly");
                    return 1;
                }
                finally
                {
                    Log.CloseAndFlush();
                }
        }
Run Code Online (Sandbox Code Playgroud)

我可以从 appsettings.json 文件构建配置文件,该文件包含一个 Serilog 节点,其中包含要使用的连接字符串和表的信息。

{
  "AppSettings": {
    "Application": {
      "Name": "Payment Processing API",
      "Version":  "1.0"
    }
  },
  "ConnectionStrings": {
    "localPaymentProcessingDb": "Server=(localdb)\\mssqllocaldb;Database=PaymentProcessing;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Serilog": {
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "Server=(localdb)\\mssqllocaldb;Database=PaymentProcessing;Trusted_Connection=True;MultipleActiveResultSets=true",
          "tableName": "Logs"
        }
      }
    ]
 }
Run Code Online (Sandbox Code Playgroud)

Github上有一个关于此问题的开放问题,但我还没有找到任何其他相关信息。

如果无法appsettings.json在 ASP.Net Core 2 项目中配置列选项,那么应在何处以及如何配置它们?

Dus*_*n C 6

如果其他人偶然发现了同样的问题,问题中链接的 GitHub 问题现在包含答案:

现在可以使用最新的 SQL 接收器和 Serilog.Settings.Configuration 包来实现这一点。

另外,我知道这个问题需要 .NET Core 2 的答案,听起来链接的 GitHub 页面回答了 2 的问题,我正在使用 .NET Core 3.1,以下内容对我有用(希望它也适用于 2)

我安装了Serilog.Settings.ConfigurationNuget 包并使用了以下 Serilog appsettings.json 配置:

"Serilog":{
   "MinimumLevel":"Information",
   "WriteTo":[
      {
         "Name":"MSSqlServer",
         "Args":{
            "connectionString":"DbContext",
            "tableName":"EventLog",
            "autoCreateSqlTable":true,
            "columnOptionsSection":{
               "addStandardColumns":[
                  "LogEvent"
               ],
               "removeStandardColumns":[
                  "MessageTemplate",
                  "Properties"
               ]
            }
         }
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)