我有一个 .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");
});
}