Asp.Net Core 2.1 的 Serilog 未从 appsettings.json 写入

Serilog with Asp.Net Core 2.1 not writing from appsettings.json

我正在尝试配置 Serilog 以从我的 ASP.NET Core 2 WebApi 中的 appsettings.json 文件中读取我的设置。

我在 appsetting.json 文件的根目录中有以下内容;

"Serilog": {
    "Using": [ "Serilog.Sinks.File", "Serilog.Sinks.Async", "Serilog.Sinks.MSSqlServer" ],
    "MinimumLevel":  "Information",
    "WriteTo": [
      {
        "Name": "Async",
        "Args": {
          "configure": [
            {
              "Name": "File",
              "Args": { "pathFormat": "Logs\Serilog\log.txt" },
              "RollingInterval": "Day"
            },
            {
              "Name": "MSSqlServer",
              "Args": {
                "connectionString": "myconnectionstring",
                "schemaName": "Schema",
                "tableName": "Logs",
                "batchPostingLimit": 1000,
                "period": 30
              }
            }
          ]
        }
      }
    ]
  }

在我的 Startup.cs 我有以下内容;

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        var log = new LoggerConfiguration()
            .ReadFrom.Configuration(Configuration)
            .CreateLogger();

        loggerFactory.AddSerilog(log);

如果我 运行 以下内容,那么输出完美,所以我知道它会移动到应用程序设置;

var log = new LoggerConfiguration()
            .MinimumLevel.Verbose()
            .WriteTo.MSSqlServer("connectionString", "Logs", schemaName:"Schema")
            .WriteTo.File("Logs\Serilog\log.txt", rollingInterval: RollingInterval.Day)
            .CreateLogger();

然后在我的 Program.cs 我有;

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration(config =>
                config.AddJsonFile(
                    x =>
                    {
                        x.Path = "appsettings.json";
                        x.Optional = true;
                        x.ReloadOnChange = true;
                    })
                .AddJsonFile(
                    x =>
                    {
                        x.Path = "appsettings.{currentEnv}.json";
                        x.Optional = true;
                        x.ReloadOnChange = true;
                    })
            )
            .UseStartup<Startup>()
            .Build();

请注意,appsettings.json 和特定环境目前都包含相同的数据。

我安装了以下版本的 Serilog;

Serilog 2.7.1 Serilog.spNetCore2.1.1 Serilog.Enrichers.Environment2.1.2 Serilog.Settings.Configuration 3.0.1 Serilog.Sinks.Async 1.3.0 Serilog.Sinks.File 4.0.0 Serilog.Sinks.MSSqlServer5.1.2

在您的 Program.cs 文件中试试这个:

UseStartup<Startup>() .UseSerilog() .Build();

这将告诉 HostBuilder 使用 Serilog 包。