Serilog с Asp.Net Core 2.1 не пишет из appsettings.json

Я пытаюсь настроить Serilog читать мои настройки из appsettings.json файл в моем ASP.NET Core 2 WebApi.

У меня есть следующее в корне 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.spNetCore 2.1.1 Serilog.Enrichers.Environment 2.1.2 Serilog.Settings.Configuration 3.0.1 Serilog.Sinks.Async 1.3.0 Serilog.Sinks.File 4.0.0 Serilog.Sinks.MSSqlServer 5.1.2

0 ответов

Попробуйте это в своем файле Program.cs:

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

Это скажет HostBuilder использовать пакет Serilog.

Другие вопросы по тегам