应用运行时看不到json文件的变化

问题描述 投票:0回答:0

我有一个 .NET 6 ASP.NET Core 应用程序。有一个带有 Serilog 配置的 serilog.json 文件。在运行时,如果更改此文件,Serilog 看不到更改,但 reloadOnChange 配置参数为 true。

程序类的主要方法:

public static void Main(string[] args)
{
    var isService = !(Debugger.IsAttached || args.Contains("--console"));
    if (isService)
    {
        var module = Process.GetCurrentProcess().MainModule;
        if (module != null)
        {
            var pathToExe = module.FileName;
            var pathToContentRoot = Path.GetDirectoryName(pathToExe);
            Directory.SetCurrentDirectory(pathToContentRoot);
        }
    }

    SetLogger();

    var host = CreateHostBuilder(args);
    if (isService && RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
        host.UseWindowsService();

    var builder = host.Build();
    try
    {
        builder.Run();
    }
    catch (OperationCanceledException)
    {
        //Service stopped
    }
}

方法SetLogger:

private static void SetLogger()
{
    var appsettingsConfiguration = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .Build();

    var serilogConfigurationFilePath = appsettingsConfiguration
        .GetSection("AppSettings:logger_config_file")
        .Get<string>();

    var serilogConfiguration = new ConfigurationBuilder()
        .AddJsonFile(serilogConfigurationFilePath, false, true)
        .Build();

    Log.Logger = new LoggerConfiguration()
        .Enrich.FromLogContext()
        .Enrich.WithThreadId()
        .Enrich.WithThreadName()
        .ReadFrom.Configuration(serilogConfiguration)
        .CreateLogger();

    ChangeToken.OnChange(() => serilogConfiguration.GetReloadToken(), () =>
    {
        Console.WriteLine("text");
    });
}
c# asp.net .net configuration serilog
© www.soinside.com 2019 - 2024. All rights reserved.