Перезагрузите конфигурацию Serilog JSON при изменениях в .NET Core 2.1 - PullRequest
0 голосов
/ 23 ноября 2018

В настоящее время я работаю над приложением ASP.NET Core 2.1 и использую Serilog для ведения журнала.Я хочу перезагрузить файл настроек приложения для моей реализации Serilog во время выполнения.

Моя цель - изменить уровень журнала во время выполнения, например, я пишу в минимальный уровень Отладка вместо Информация и я сохраняю файл.Я хочу вызвать перезагрузку настроек в реальном времени.Мой appsettings.json выглядит так:

{
  "serilog": {
    "using": [ "Serilog.Sinks.File", "Serilog.Sinks.Console" ],
    "minimumLevel": "Information",
    "writeTo": [
      {
        "name": "File",
        "args": {
          "fileSizeLimitBytes": 256000000,
          "retainedFileCountLimit": 62,
          "rollingInterval": "Day",
          "rollOnFileSizeLimit": true,
      },
      {
        "name": "Console",
      }
    ]
  }
}

В моем Program.cs я загружаю настройки с флагом reloadOnChange: true.

public class Program
{
    public static readonly ServiceSettings Settings = new ServiceSettings();
        public static void Main(string[] args)
    {
        //...
    }
    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        var config = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile(Path.GetFullPath(CoreServiceBase.Instance.ConfigFilePath), optional: false, reloadOnChange: true)
            .AddCommandLine(args)
            .Build();

        config.Bind(Settings);

        return WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseSerilog((hostingContext, loggerConfiguration) =>
                    loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration))
            .UseConfiguration(config);
    }
}

Мой запуск выглядит следующим образом:

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

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        // ...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        // Custom application logging
        ApplicationLogging.LoggerFactory = loggerFactory;

        // ...
    }
}

Знаете ли вы, как перезагрузить конфигурацию Serilog во время выполнения, если я каким-то образом изменил appsettings.json.=> Обновление в реальном времени для appsettings.json.

Спасибо !!

1 Ответ

0 голосов
/ 24 ноября 2018

Вы можете изменить уровень логирования, используя LoggingLevelSwitch.Вы можете прочитать об этом здесь

Вы можете использовать интерфейс IOptionsSnapshot<> для перезагрузки конфигурации.Вы можете прочитать больше об этом здесь

...